您好我是一名新的WPF / MVVM程序员,并且遇到了MenuItem问题。
我有一个菜单,其中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一致......
<MenuItem Header="Profiles" ItemsSource="{Binding Path=ProfileList}" DisplayMemberPath="ProfileName" IsCheckable="True" IsChecked="{Binding IsSelected}" />
我的属性 IsSelected 会更新,但我看不到菜单中的任何项目只是标题个人资料。
关于我做错了什么的想法????
答案 0 :(得分: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>