我花了很多时间研究这个;我很好奇是否可以在XAML中完全进行简单绑定,而无需在后面的代码中实现INotifyPropertyChanged。
具有讽刺意味的是,在我研究过这段时间的时候,我可以在代码中完成它5次。
我遇到过一些建议使用DataTriggers的文章(对于MenuItems,DataTrigger必须位于样式触发器内)。我试过这个,但没有错误就行不通。
我怀疑DataTrigger由于MenuItem范围问题而找不到组合框,我在另一个帖子中读到了这个问题。
有人有任何建议吗?
代码:(没有构建或运行时错误,但属性未更新)
<ContextMenu>
<MenuItem Header="Do Something Neat" x:Name="MyMenuItem" Click="MyMenuItem_Click">
<MenuItem.Style>
<Style TargetType="{x:Type MenuItem}">
<Style.Triggers>
<Setter Property="IsEnabled" Value="True" />
<DataTrigger Binding="{Binding ElementName=MyComboBox, Path=SelectedIndex}" Value="-1">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</MenuItem.Style>
</MenuItem>
</ContextMenu>
答案 0 :(得分:1)
我将默认的setter移到Style.Triggers
之前(由于编译错误),将所有内容放入Menu
(以简化示例)并使其在索引0
上触发(以更好地证明结果)。以下作品:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<DockPanel LastChildFill="False">
<Menu Height="23" DockPanel.Dock="Top" >
<MenuItem Header="Do Something Neat">
<MenuItem.Style>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="IsEnabled" Value="True" />
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=MyComboBox, Path=SelectedIndex}" Value="0">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</MenuItem.Style>
</MenuItem>
</Menu>
<ComboBox Name="MyComboBox" Height="23" Width="120" DockPanel.Dock="Top" >
<ComboBoxItem >Index0</ComboBoxItem>
<ComboBoxItem >Index1</ComboBoxItem>
</ComboBox>
</DockPanel>
</Window>