2011-01-05 5 views
1

현재 MVVM 패턴에 넣으려는 두 가지 기능을하는 WPF 버튼이 있습니다. 클릭하면 조건이 충족되면 동적으로 작성되는 컨텍스트 메뉴가 열립니다. 그렇지 않으면 다른 기능을 실행하기 만하면됩니다.버튼 클릭 이벤트의 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은 VM 이후이 코드는 메뉴를 배치 할 수있는 버튼에 대한 지식이없는 수행, 메뉴 자체를 열려면?

답변

0

MyTest()를 단추의 DataContext 내에 배치 한 개체에 넣은 다음 XAML에 정의 된 DataTrigger를 사용하여 사용하도록 설정 한 개체를 결정할 수 있습니다. EG :

XAML에서 그런
public class ButtonAnnotation 
{ 
    public object Foo { get; set; } 

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

} 

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

가 : ButtonAnnotation``에서

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

'INotifyPropertyChanged'? – Svisstack

관련 문제