我想在我的 ViewModel 中处理 ComboBox 的 DropDownOpened 事件。我怎样才能做到这一点。
基本上我的 Comboxbox 的 ItemSource 绑定到一个集合。这个集合可以改变,我不知道它什么时候改变。所以我想要做的是,每次用户点击组合框(打开下拉菜单)时,我都想重新填充组合框。如何在 ViewModel 中做到这一点。
提前谢谢了。
我想在我的 ViewModel 中处理 ComboBox 的 DropDownOpened 事件。我怎样才能做到这一点。
基本上我的 Comboxbox 的 ItemSource 绑定到一个集合。这个集合可以改变,我不知道它什么时候改变。所以我想要做的是,每次用户点击组合框(打开下拉菜单)时,我都想重新填充组合框。如何在 ViewModel 中做到这一点。
提前谢谢了。
在我看来,使用视图模型在 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页面。