我的情况是,每当有人更改组合框中的值时,我都需要清空模型中的属性。
这样做的一个副作用是,每当我更改 Combobox-Bound 变量的值时,都会触发 Combobox SelectionChanged 事件。
无论如何都知道是谁触发了这个事件。我想知道它是手动触发还是通过绑定触发的。
我正在查看发件人,但他们看起来差不多。
谢谢,
我的情况是,每当有人更改组合框中的值时,我都需要清空模型中的属性。
这样做的一个副作用是,每当我更改 Combobox-Bound 变量的值时,都会触发 Combobox SelectionChanged 事件。
无论如何都知道是谁触发了这个事件。我想知道它是手动触发还是通过绑定触发的。
我正在查看发件人,但他们看起来差不多。
谢谢,
这是 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}" />
Dropodownclose 是我在这里最好使用的事件,而不是 selectionchanged。这将确保事件不是由绑定的数据触发,而是由用户界面交互触发。