自动更改ComboBox中的选择

时间:2015-08-11 11:55:45

标签: c# wpf

我有两个组合框。当用户更改另一个组合框中的项目选择时,如何在一个ComboBox中进行选择会自动更改?我假设这样的事情:

 private void ComboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
      ComboBox2_SelectionChanged();
}

但是要作为一个论点传递什么?

3 个答案:

答案 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会以某种方式连接它们。