2012-02-16 73 views
1

你好我是一个新的WPF/MVVM程序员,并且遇到MenuItem的问题。MenuItem IsChecked属性NOT绑定到VM属性

我有一个菜单谁的ItemsSourced绑定到我创建的对象;

 <Menu Height="23" HorizontalAlignment="Left" Name="menuProfile" VerticalAlignment="Top" Width="58" > 
     <MenuItem Header="Profiles" ItemsSource="{Binding Path=ProfileList}" DisplayMemberPath="ProfileName" > 
      <MenuItem.ItemContainerStyle> 
       <Style TargetType="MenuItem"> 
        <Setter Property="IsCheckable" Value="True"/> 
        <Setter Property="IsChecked" Value="{Binding Path=IsSelected, Mode=TwoWay}"/> 
       </Style> 
      </MenuItem.ItemContainerStyle> 
     </MenuItem> 
    </Menu> 

当我运行此我可以看到我的菜单中的所有项目,但我的财产IsSelected没有得到更新。

public bool IsSelected 
    { 
     get { return _isSelected; } 
     set 
     { 
      _isSelected = value; 
      GetProfileConfigInfo();   
     } 
    } 

如果我把风格容器,并把该IsCheckable与菜单项线器isChecked值....

<MenuItem Header="Profiles" ItemsSource="{Binding Path=ProfileList}" DisplayMemberPath="ProfileName" IsCheckable="True" IsChecked="{Binding IsSelected}" /> 

我的财产IsSelected得到更新,但我无法看到我的菜单中的任何项目只是标头配置文件

关于我在做什么的想法是错误的?

回答

1

在IsSelected的setter中,需要调用OnPropertyChanged(“IsSelected”)。

我认为这可以解决您的问题。

我将您的确切代码(如下)复制到Blend中,并使用您的确切属性名称创建了示例数据源,并且菜单中的复选框正常工作。

<Menu Height="23" HorizontalAlignment="Left" Name="menuProfile" VerticalAlignment="Top" Width="58" > 
    <MenuItem Header="Profiles" ItemsSource="{Binding Path=ProfileList}" DisplayMemberPath="ProfileName" > 
     <MenuItem.ItemContainerStyle> 
      <Style TargetType="MenuItem"> 
       <Setter Property="IsCheckable" Value="True"/> 
       <Setter Property="IsChecked" Value="{Binding Path=IsSelected, Mode=TwoWay}"/> 
      </Style> 
     </MenuItem.ItemContainerStyle> 
    </MenuItem> 
</Menu>