1

您好,我是一名新的 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();        
        }
    }

如果我取出样式容器并将IsCheckableIsChecked值与 MenuItem 保持一致......

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

我的属性IsSelected得到更新,但我看不到菜单中的任何项目,只是标题Profiles

并知道我做错了什么????

4

1 回答 1

1

在 IsSelected 的设置器中,您需要调用 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>
于 2012-02-17T04:39:41.913 回答