在WPF中的SelectedItem的有界属性设置器中更改Combobox SelectedItem

时间:2016-03-02 10:24:08

标签: wpf mvvm data-binding combobox 2-way-object-databinding

我在[{1}}中有方案,我们希望在选择特定值时更改Combobox的当前SelectedItem

For Instance :我们的指定Combobox的值为:ComboboxCEOManagerDev .. 选择QA后,我们希望将其更改为CEO值。

Manager绑定到ViewModel中的属性。

1 个答案:

答案 0 :(得分:0)

啊哈!我认为这是一个愚蠢的问题,可以毫不费力地回答:P。但是,它认为我的教训是,WPF不像我一直认为的那样工作。

以下是样本工作解决方案。

<强> MainWindow.xaml

<Grid>
    <ComboBox Width="100" Height="50" ItemsSource="{Binding ComboList}"  SelectedValue="{Binding Selected, Mode=TwoWay, IsAsync=True}"/>
</Grid>

<强> MainWindow.xaml.cs

public MainWindow()
{
    InitializeComponent();
    ObservableCollection<string> lst = new ObservableCollection<string>();
    lst.Add("CEO");
    lst.Add("Tester");
    lst.Add("president");
    lst.Add("Developer");
    lst.Add("Manager");

    MainWindowViewModel vm = new MainWindowViewModel() { ComboList = lst, Selected = "Employee" };
    this.DataContext = vm;
}

<强> MainWindowViewModel.cs

public class MainWindowViewModel : INotifiPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }

    public ObservableCollection<string> ComboList { get; set; }

    private string selected;
    public string Selected
    {
        get { return selected; }
        set
        {
            selected = value == "CEO" ? "Manager" : value;
            OnPropertyChanged("Selected");
        }
    }

}

密钥是 IsAsync=True ,这就是诀窍。感谢他Martin Harris

answer