2017-07-03 155 views
0

如何为“IsChecked”编写绑定? 我想检查2菜单中的任何一个。WPF ContextMenu IsChecked绑定

如果我点击“Hello1”,我想添加检查“Hello1”, ,并删除“Hello2”的检查。

如果我点击“Hello2”,我想添加检查“Hello2”, 并删除“Hello1”的检查。

我试了一个星期。但是我不能。请帮我“如何写绑定” 没有互联网的例子。 我最近开始WPF编程。我只能做表格申请。 这是非常大的不同....

<Window x:Class="WpfApp2.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:WpfApp2" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 

    <Window.Resources> 
     <ContextMenu Name="ContextMenuMain" x:Key="menuListBox"> 
      <MenuItem Header="Hello1" IsChecked="{Binding Path=IsCheck1, Mode=OneWay}" Name="ContextMenu_Hello1" Click="ContextMenuClick_Hello1"/> 
     <MenuItem Header="Hello2" IsChecked="{Binding Path=IsCheck2, Mode=OneWay}" Name="ContextMenu_Hello2" Click="ContextMenuClick_Hello2"/> 
    </ContextMenu> 
    </Window.Resources> 

</Window> 

我最困难的一点就是下面的代码。 我试图在MainWindow中使用“ContextMenu_Hello1”的名字。 但C#不允许我使用它...

public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      ContextMenu_Hello1.DataContext // error ! 
     } 
    } 

这是超出范围?但为什么 ?

回答

1

设置窗口的ContextMenu属性。如果您希望能够检查菜单项,则还应该将IsCheckable属性设置为true。此外,您不能绑定模式设置为OneWay

<Window x:Class="WpfApp2.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:WpfApp2" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 

    <Window.ContextMenu> 
     <ContextMenu Name="ContextMenuMain"> 
      <MenuItem Header="Hello1" IsCheckable="True" IsChecked="{Binding Path=IsCheck1}" Name="ContextMenu_Hello1" /> 
      <MenuItem Header="Hello2" IsCheckable="True" IsChecked="{Binding Path=IsCheck2}" Name="ContextMenu_Hello2" /> 
     </ContextMenu> 
    </Window.ContextMenu> 
</Window> 

当你做这些改变,你就可以绑定到DataContext的任何属性:

public partial class MainWindow : Window, INotifyPropertyChanged 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = this; 
    } 

    private bool _isCheck1; 
    public bool IsCheck1 
    { 
     get { return _isCheck1; } 
     set 
     { 
      _isCheck1 = value; 
      NotifyPropertyChanged(); 
      _isCheck2 = !_isCheck1; 
      NotifyPropertyChanged("IsCheck2"); 
     } 
    } 

    private bool _isCheck2; 
    public bool IsCheck2 
    { 
     get { return _isCheck2; } 
     set 
     { 
      _isCheck2 = value; 
      NotifyPropertyChanged(); 
      _isCheck1 = !_isCheck2; 
      NotifyPropertyChanged("IsCheck1"); 
     } 
    } 


    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 
+0

它的工作原理!谢谢 ! :) –

相关问题