我想在ViewModel中处理ComboBox的DropDownOpened事件。我怎么能这样做。
基本上我的Comboxbox的ItemSource绑定到一个集合。这个集合可以改变,我不知道它什么时候改变。所以我想要做的是,每次用户点击组合框时我想重新填充ComboBox(打开下拉列表)。我怎么能在ViewModel中做到这一点。
非常感谢提前。
答案 0 :(得分:0)
在我看来,使用视图模型处理WPF中UI事件的最佳方法是实现Attached Properties
。以下是我用来监视LostFocus
事件的示例...而不是将EventArgs
对象传递给视图模型,我正在公开ICommand
的基本实例(你是可以在您的视图模型中实现当焦点从关联的TextBox
:
public static DependencyProperty OnLostFocusProperty = DependencyProperty.
RegisterAttached("OnLostFocus", typeof(ICommand), typeof(TextBoxProperties), new
UIPropertyMetadata(null, OnLostFocusChanged));
public static ICommand GetOnLostFocus(DependencyObject dependencyObject)
{
return (ICommand)dependencyObject.GetValue(OnLostFocusProperty);
}
public static void SetOnLostFocus(DependencyObject dependencyObject, ICommand value)
{
dependencyObject.SetValue(OnLostFocusProperty, value);
}
public static void OnLostFocusChanged(DependencyObject dependencyObject,
DependencyPropertyChangedEventArgs e)
{
TextBox textBox = dependencyObject as TextBox;
if (e.OldValue == null && e.NewValue != null) textBox.LostFocus += TextBox_LostFocus;
else if (e.OldValue != null && e.NewValue == null) textBox.LostFocus -= TextBox_LostFocus;
}
private static void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
TextBox textBox = sender as TextBox;
ICommand command = GetOnLostFocus(textBox);
if (command != null && command.CanExecute(textBox)) command.Execute(textBox);
e.Handled = false;
}
您可以这样使用它:
<TextBox Text="{Binding SomeValue}" Attached:TextBoxProperties.OnLostFocus="{Binding
YourCommandName}" />
我确信您可以进行一些更改,以便能够将其应用到您的情况中。如果您不熟悉Attached Properties
,请查看MSDN上的Attached Properties Overview页面。