Изменить контекстное меню WPF для события нажатия кнопки на MVVM - PullRequest
1 голос
/ 05 января 2011

У меня есть кнопка WPF, которая в настоящее время выполняет две функции, которые я хотел бы добавить в шаблон MVVM.Если при нажатии выполняется условие, открывается контекстное меню, которое мы динамически создаем, в противном случае мы просто выполняем другую функцию.

private void Button_MouseDown(object sender, MouseButtonEventArgs e)
{
    if (e.ChangedButton == MouseButton.Left)
    {
        if (MyTest())
        {
          Button b = sender as Button;
          ContextMenu contextMenu = MyContextMenuBuilder();
          contextMenu.PlacementTarget = b;
          contextMenu.Placement = System.Windows.Controls.Primitives.PlacementMode.Bottom;
          contextMenu.IsOpen = true;
        }
        else
       {
          MyOtherFunction();
       }
    }
}

Как мне MV-VM этот код, так как виртуальная машина не знает кнопки для размещения меню и самого меню для его открытия?

1 Ответ

0 голосов
/ 06 января 2011

Вы можете поместить MyTest () в объект, который вы помещаете в DataContext кнопки, а затем определить DataTrigger в XAML, который решает, что включено.EG:

public class ButtonAnnotation
{
    public object Foo { get; set; }

    public bool SatisfiesTest {
        get {
            ... logic for MyTest goes here ...
        }
    }

}

...
this.TheButtonOrItsParent.DataContext = new ButtonAnnotation();

Затем в XAML:

<DataTrigger Binding="{Binding Path=SatisfiesTest}" Value="True">
    <DataTrigger.Setters>
        <Setter Property="ContextMenu" Value="{StaticResource TheContextMenu}"/>
    </DataTrigger.Setters>
</DataTrigger>
...