Свойство MenuItem IsChecked НЕ связывается со свойством VM - PullRequest
1 голос
/ 17 февраля 2012

Здравствуйте, я новый программист 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 Ответ

1 голос
/ 17 февраля 2012

В вашем установщике для 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>
...