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 に答える