0

我想在我的 ViewModel 中处理 ComboBox 的 DropDownOpened 事件。我怎样才能做到这一点。

基本上我的 Comboxbox 的 ItemSource 绑定到一个集合。这个集合可以改变,我不知道它什么时候改变。所以我想要做的是,每次用户点击组合框(打开下拉菜单)时,我都想重新填充组合框。如何在 ViewModel 中做到这一点。

提前谢谢了。

4

1 回答 1

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页面。

于 2013-08-15T12:06:10.970 回答