2012-02-16 70 views
1

你好我是一個新的WPF/MVVM程序員,並且遇到MenuItem的問題。MenuItem IsChecked屬性NOT綁定到VM屬性

我有一個菜單誰的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 Header="Profiles" ItemsSource="{Binding Path=ProfileList}" DisplayMemberPath="ProfileName" IsCheckable="True" IsChecked="{Binding IsSelected}" /> 

我的財產IsSelected得到更新,但我無法看到我的菜單中的任何項目只是標頭配置文件

關於我在做什麼的想法是錯誤的?

回答

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>