Как вы обрабатываете ComboBox SelectionChanged в MVVM? Выбор измененных событий не ведется.
ComboBox1
<ComboBox Grid.Column="1" Grid.Row="1" Height="23" HorizontalAlignment="Center" Margin="2,2,0,0" Name="comboBoxServer" VerticalAlignment="Top" Width="156" ItemsSource="{Binding Path=ServerNameList, Mode=OneWay}" SelectedIndex="0" SelectedItem="{Binding SelectedIndex}" SelectionChanged="comboBoxServer_SelectionChanged" Text="{Binding selectedServer, Mode=OneWayToSource,UpdateSourceTrigger=PropertyChanged}" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding serverCommand}" CommandParameter="{Binding ElementName=comboBoxServer, Path=SelectedValue}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ComboBox>
ComboBox2
<ComboBox Grid.Column="1" Grid.Row="2" Height="23" HorizontalAlignment="Center" Margin="2,2,0,0" Name="comboBoxDBName" VerticalAlignment="Top" Width="156" ItemsSource="{Binding Path=DBNameList, Mode=OneWay}" SelectedItem="{Binding serverSelected, Mode=TwoWay}" >
</ComboBox>
Я хочу, чтобы при выборе значения в первом поле со списком, второе поле со списком должно заполняться в соответствии с выбором первого поля со списком.
1 ответ
Поскольку вы используете MVVM, самое простое решение - поместить выбранную логику comboboxItem в установщик ее свойств. ViewModel должен реализовывать INotifyPropertyChanged:
<ComboBox
Grid.Row="0" Grid.Column="0"
ItemsSource="{Binding Path=AvailableItems}"
SelectedValue="{Binding Path=SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Margin="3" />
<ComboBox
Grid.Row="1" Grid.Column="0"
ItemsSource="{Binding Path=AvailableServers}"
SelectedValue="{Binding Path=SelectedServer, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
Margin="3" />
И свойства могут выглядеть так:
private Item selectedItem;
public Item SelectedItem
{
get { return selectedItem; }
set
{
selectedItem = value;
ChangeSelectedServer();
OnPropertyChanged("SelectedItem");
}
}
private void ChangeSelectedServer()
{
switch(selectedItem)
{
case ...
// your setting logic here...
// like: SelectedServer = AvailableServers.Where(s => s.Id == selectedItem.Id).Single();
break;
}
}
private Item selectedServer;
public Item SelectedServer
{
get { return selectedServer; }
set
{
selectedServer = value;
OnPropertyChanged("SelectedServer");
}
}
Или вы можете реализовать это через Command, как описано здесь