我有两个组合框。当用户更改另一个组合框中的项目选择时,如何在一个ComboBox中进行选择会自动更改?我假设这样的事情:
private void ComboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox2_SelectionChanged();
}
但是要作为一个论点传递什么?
答案 0 :(得分:3)
你的问题不是很具体,所以根据你想要达到的目标,这是另一种方法:
private void ComboBox1_SelectionChanged(object sender, SelectionChangedEventArgse)
{
ComboBox2.SelectedIndex = (sender as ComboBox).SelectedIndex;
}
答案 1 :(得分:2)
通常将数据绑定到ComboBox.SelectedItem
属性,以便我们知道在UI中选择了哪个项目。在这些情况下,很容易对选定的值采取行动......以此为例:
public SomeDataType SelectedItem
{
get { return selectedItem; }
set
{
selectedItem = value;
NotifyPropertyChanged("SelectedItem");
DoSomethingWithSelectedValue(SelectedItem);
}
}
现在,每次在ComboBox
中进行选择时,都会调用此DoSomethingWithSelectedValue
方法,您可以在此处执行任何操作...它可能会设置新的{{1依赖于第一个ComboBox.ItemsSource
中的选定值,或者只是设置ComboBox
......无论您需要什么。
答案 2 :(得分:0)
我会从这样的模型中解决它:
// View
<ComboBox SelectedItem="{Binding First}" ItemsSource="{Binding Selectables}" IsSynchronizedWithCurrentItem="True" />
<ComboBox SelectedItem="{Binding Second}" ItemsSource="{Binding Selectables2}" IsSynchronizedWithCurrentItem="True" Grid.Column="1" />
// Model
public ObservableCollection<string> Selectables { get; set; }
public ObservableCollection<string> Selectables2 { get; set; }
private string _first;
private string _second;
public string First {
get {
return _first;
}
set {
if(_first == value) {
return;
}
_first = value;
Second = value;
OnPropertyChanged("First");
}
}
public string Second {
get {
return _second;
}
set {
if(_second == value) {
return;
}
_second = value;
First = value;
OnPropertyChanged("Second");
}
}
有趣的是,这也有效:
// View
<ComboBox SelectedItem="{Binding First}" ItemsSource="{Binding Selectables}" IsSynchronizedWithCurrentItem="True" />
<ComboBox SelectedItem="{Binding Second}" ItemsSource="{Binding Selectables}" IsSynchronizedWithCurrentItem="True" Grid.Column="1" />
// Model
public ObservableCollection<string> Selectables { get; set; }
private string _first;
private string _second;
public string First {
get {
return _first;
}
set {
_first = value;
OnPropertyChanged("First");
}
}
public string Second {
get {
return _second;
}
set {
_second = value;
OnPropertyChanged("Second");
}
}
Tho First和Second应该是不同的,但是如果两个IsSynchronizedWithCurrentItem
相同,那么ItemsSource
会以某种方式连接它们。