Привязка свойства MenuItem (IsEnabled) к свойству комбинированного списка (SelectedIndex) в том же элементе управления - PullRequest
2 голосов
/ 29 июля 2010

Я провел большую часть своего дня, исследуя это; Мне любопытно, можно ли полностью выполнить простую привязку в 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>

1 Ответ

1 голос
/ 03 апреля 2011

Я переместил установщик по умолчанию до 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>
...