0

我的情况是,每当有人更改组合框中的值时,我都需要清空模型中的属性。

这样做的一个副作用是,每当我更改 Combobox-Bound 变量的值时,都会触发 Combobox SelectionChanged 事件。

无论如何都知道是谁触发了这个事件。我想知道它是手动触发还是通过绑定触发的。

我正在查看发件人,但他们看起来差不多。

谢谢,

4

2 回答 2

0

这是 WPF 开发人员应使用 MVVM 设计模式的主要示例。通过依赖 SelectionChanged 事件来控制代码流,您将失去对应该发生的事情的控制权,而不得不知道事件是如何被触发的,以便您可以做出响应。那是被动的,而不是主动的。作为开发人员,您应该始终知道什么会影响您的代码流。

相反,将您的 WPF 页面或控件的 DataContext 设置为包装您的模型并将您的组合框绑定到 ViewModel 属性的视图模型类,在这种情况下特别是 SelectedItem。这将极大地简化您的编码。

视图模型

public class ViewModel : INotifyPropertyChanged 
{
    public event PropertyChangedEventHandler PropertyChanged;

    public ObservableCollection<string> Names = new ObservableCollection<string>();
    private string _selectedName;
    private YourModel _model;

    public ViewModel(YourModel model)
    {
        _model = model;
    }

    public string SelectedName
    {
        get { return _model.SelectedName; }
        set
        {
            _model.SelectedName = value;
            OnPropertyChanged();
        }
    }

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
}

XAML

<ComboBox ItemsSource="{Binding Names}" SelectedItem="{Binding SelectedName}" />
于 2014-08-06T14:17:44.043 回答
0

Dropodownclose 是我在这里最好使用的事件,而不是 selectionchanged。这将确保事件不是由绑定的数据触发,而是由用户界面交互触发。

于 2014-08-07T09:23:15.637 回答