2011-01-05 10 views
1

現在、MVVMパターンに入れたい2つの機能を持つ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(); 
     } 
    } 
} 

VMはメニューを配置するボタンとそのメニューを開くためのボタンの知識がないため、このコードをMV-VMにするにはどうすればよいですか?

答えて

0

ボタンのDataContext内に配置したオブジェクトにMyTest()を配置し、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(); 

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

'ButtonAnnotation'で' INotifyPropertyChanged'? – Svisstack

関連する問題