Состояние IsEnabled элемента управления Groupbox не распространяется на дочернюю кнопку, когда IsEnabled этой кнопки привязан к некоторой модели представления

Групповой ящик содержит сетку с двумя кнопками.

Надеюсь, код может лучше выразить это:

<Window x:Class="PanelTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="344" Width="361"
    x:Name="This">
<Grid>
    <GroupBox x:Name="_groupBox" IsEnabled="False" Header="GroupBox" HorizontalAlignment="Left" Margin="30,87,0,0" VerticalAlignment="Top" Height="206" Width="300">
        <Grid>
            <Button Content="Bound Button" IsEnabled="{Binding IsEnabled, Mode=TwoWay}" HorizontalAlignment="Left" Height="51" VerticalAlignment="Top" Width="128" Margin="140,75,0,0"/>
            <Button Content="Unbound Button" HorizontalAlignment="Left" Margin="10,75,0,0" VerticalAlignment="Top" Width="125" Height="51"/>
        </Grid>
    </GroupBox>
    <Button Content="Toggle Group Enabled" HorizontalAlignment="Left" Margin="93,29,0,0" VerticalAlignment="Top" Width="161" Click="EnableClick" Height="35"/>

</Grid>

public partial class MainWindow : Window {
    public MainWindow() {
        InitializeComponent();
        DataContext = new ButtonViewModel();
    }

    private void EnableClick(object sender, RoutedEventArgs e)
    {
        _groupBox.IsEnabled = !_groupBox.IsEnabled;
    }
}

public class ButtonViewModel : INotifyPropertyChanged {

    static ButtonViewModel() {
        eventArgCache = new Dictionary<string, PropertyChangedEventArgs>();
    }

    bool _enabled;
    public bool IsEnabled {
        get { return _enabled; }
        set {
            if (_enabled == value)
                return;
            _enabled = value;
            RaisePropertyChanged("IsEnabled");
        }
    }

...}

Когда я переключаю включенное состояние группового поля, я ожидал, что свойство IsEnabled будет установлено, но оно вообще не вызывается, а связанная кнопка также не принимает включенное состояние группового поля.

Есть ли способ сделать так, чтобы и (двусторонняя) привязка, и отношения родитель-потомок работали одновременно?


person jchristof    schedule 21.07.2014    source источник
comment
Ваши требования не ясны. Вы хотите что-то вроде того, когда GroupBox отключен, связанная кнопка также должна быть отключена, и наоборот?   -  person Vishal    schedule 22.07.2014
comment
Да, при переключении группового поля я бы хотел, чтобы состояние включения кнопки соответствовало включению группового поля и по-прежнему разрешало привязку к IsEnabled в модели представления кнопки.   -  person jchristof    schedule 22.07.2014


Ответы (1)


используйте это для привязки свойства кнопки к свойству группового поля

<GroupBox x:Name="_groupBox" IsEnabled="False" Header="GroupBox" HorizontalAlignment="Left" Margin="30,87,0,0" VerticalAlignment="Top" Height="206" Width="300">
    <Grid>
        <Button Content="Bound Button" IsEnabled="{Binding IsEnabled, ElementName=_groupBox}" HorizontalAlignment="Left" Height="51" VerticalAlignment="Top" Width="128" Margin="140,75,0,0"/>
        <Button Content="Unbound Button" HorizontalAlignment="Left" Margin="10,75,0,0" VerticalAlignment="Top" Width="125" Height="51"/>
    </Grid>
</GroupBox>

заметка 2_

во-вторых, нет известного способа привязать свойство кнопки к одновременному соответствию _groupBox и модели представления, когда они оба различаются. т.е. _groupBox.IsEnabled is false и viewmodel.IsEnabled is true однако вычисляемое свойство может помочь вам выполнить такую ​​логику

person pushpraj    schedule 22.07.2014