C# 双向绑定

C# 双向绑定,c#,wpf,xaml,binding,C#,Wpf,Xaml,Binding,我创建了用户控件(切换按钮),其中包含名为ButtonState的属性(选中、禁用或可用)。控件具有内置的鼠标单击事件,可将其状态从“可用”转换为“已按下”,或从“已按下”转换为“可用”(如果禁用,则无法单击) 我的目的是创建按钮的“树”,类似于: OPTION 1 OPTION 2 SUBOPTION1 SUBOPTION1 SUBOPTION1 SUBOPTION1 ....

我创建了用户控件(切换按钮),其中包含名为ButtonState的属性(选中、禁用或可用)。控件具有内置的鼠标单击事件,可将其状态从“可用”转换为“已按下”,或从“已按下”转换为“可用”(如果禁用,则无法单击)

我的目的是创建按钮的“树”,类似于:

OPTION 1                          OPTION 2
SUBOPTION1 SUBOPTION1             SUBOPTION1 SUBOPTION1
....                              .....
所以,如果我点击按钮“选项1”(它将状态更改为在控制范围内按下),我想按钮“选项2”转到禁用状态。如果我再次单击选项1,它将从按下转换为可用,选项2也将变为可用。如果我单击选项2(当然类似),应该运行相同的过程。再次简要说明:只有一个按钮可以处于按下状态,如果一个按钮处于这种状态,则必须禁用另一个按钮。如果一个可用,另一个也必须可用

我已经创建了转换器(InverseButtonStateConverter)BUTTONSTATE->BUTTONSTATE

public object Convert(object value, Type targetType, object parameter,       System.Globalization.CultureInfo culture)
{
switch (((Controls.ButtonState)value))
    {
            case Controls.ButtonState.Available: return Controls.ButtonState.Available;
            case Controls.ButtonState.Pressed: return Controls.ButtonState.Disable;
            case Controls.ButtonState.Disable: return Controls.ButtonState.Available;
            default: return Controls.ButtonState.Available;
    }
}
在XAML中使用:

        <Controls:ToggleRectangleButton HorizontalAlignment="Center" VerticalAlignment="Center" Height="109" Width="210" ButtonText2="Bilety jednorazowe" TextFontSize="25" Grid.Column="0" x:Name="btSingleTicket" Click="btSingleTicket_Click" ButtonState="{Binding ElementName=btTimeTicket, Path=ButtonState, Converter={StaticResource InverseButtonStateConverter}}"/>
        <Controls:ToggleRectangleButton HorizontalAlignment="Center" VerticalAlignment="Center" Height="109" Width="210" ButtonText2="Bilety czasowe" TextFontSize="25" Grid.Column="3" x:Name="btTimeTicket" Click="btTimeTicket_Click" ButtonState="{Binding ElementName=btSingleTicket, Path=ButtonState, Converter={StaticResource InverseButtonStateConverter}}"/>

当我运行这段代码时,当我点击一个按钮时,它工作得很好。如果我点击second来打断它(它不会像我想的那样工作),first的按钮正确工作的能力就会消失


我试图改变绑定模式,但我不知道如何做到这一点。一些帮助?

使用两个
切换按钮和一个布尔反相器转换器,您可以通过将各自的
IsEnabled
属性绑定到
IsChecked
属性来实现:

<ToggleButton Content="1" x:Name="btn1" IsEnabled="{Binding ElementName=btn2, Path=IsChecked, Converter={StaticResource BooleanInverterConverter}}"/>
<ToggleButton Content="2" x:Name="btn2" IsEnabled="{Binding ElementName=btn1, Path=IsChecked, Converter={StaticResource BooleanInverterConverter}}"/>

使用两个
ToggleButton
s和一个布尔反相器转换器,可以通过将各自的
IsEnabled
属性绑定到
IsChecked
属性来实现:

<ToggleButton Content="1" x:Name="btn1" IsEnabled="{Binding ElementName=btn2, Path=IsChecked, Converter={StaticResource BooleanInverterConverter}}"/>
<ToggleButton Content="2" x:Name="btn2" IsEnabled="{Binding ElementName=btn1, Path=IsChecked, Converter={StaticResource BooleanInverterConverter}}"/>

更好地使用ViewModel更好地使用ViewModel