MenuItem IsChecked属性不绑定到VM属性

时间:2012-02-16 22:51:52

标签: wpf binding mvvm menuitem ischecked

您好我是一名新的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 会更新,但我看不到菜单中的任何项目只是标题个人资料

关于我做错了什么的想法????

1 个答案:

答案 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>