2

我花了我一天的大部分时间来研究这个;我很好奇是否可以在 XAML 中完全进行简单绑定,而无需在后面的代码中实现 INotifyPropertyChanged。

具有讽刺意味的是,在我研究这个问题的时间里,我本可以在后面的代码中完成 5 次以上。

我遇到了一些建议使用 DataTriggers 的文章(对于 MenuItems,DataTrigger 必须在 Style Trigger 内)。我已经尝试过了,但它不能没有错误地工作。

我怀疑由于 MenuItem 范围问题,DataTrigger 找不到组合框,我在另一个线程中阅读了该问题。

有人有什么建议吗?

代码:(没有构建或运行时错误,但属性未更新)

<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>
4

1 回答 1

1

我将默认设置器移到之前Style.Triggers(因为编译错误),将所有内容放入 a 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>
于 2011-04-03T12:13:43.457 回答