gpt4 book ai didi

c# - 将 RadioButtons 绑定(bind)到单个属性?

转载 作者:行者123 更新时间:2023-11-30 13:56:25 25 4
gpt4 key购买 nike

  • 我的 RadioButton 很少,我不想绑定(bind)“IsChecked”他们每个人的属性在代码中都是唯一的。
  • 我想拥有一个像“CurrentSelected”这样的单一属性,并根据到那个设置“IsChecked”。
  • 此外,我不想使用转换器。
  • 我尝试使用“ChangePropertyAction”行为,但它看起来像它仅以一种方式工作。这是我的代码:

    <RadioButton
    x:Name="UpRadioButton"
    Margin="5"
    Content="Up"
    >
    <i:Interaction.Triggers>
    <ei:DataTrigger Binding="{Binding IsChecked, ElementName=UpRadioButton}" Value="True">
    <ei:ChangePropertyAction TargetObject="{Binding Mode=OneWay}" PropertyName="SelectedDirection" Value="{x:Static Enums:DirectionEnum.Up}" />
    </ei:DataTrigger>
    </i:Interaction.Triggers>
    </RadioButton>

    <RadioButton
    x:Name="DownRadioButton"
    Margin="5"
    Content="Down"
    >
    <i:Interaction.Triggers>
    <ei:DataTrigger Binding="{Binding IsChecked, ElementName=DownRadioButton}" Value="True">
    <ei:ChangePropertyAction TargetObject="{Binding Mode=OneWay}" PropertyName="SelectedDirection" Value="{x:Static Enums:DirectionEnum.Down}" />
    </ei:DataTrigger>
    </i:Interaction.Triggers>
    </RadioButton>

    <RadioButton
    x:Name="LeftRadioButton"
    Margin="5"
    Content="Left"
    >
    <i:Interaction.Triggers>
    <ei:DataTrigger Binding="{Binding IsChecked, ElementName=LeftRadioButton}" Value="True">
    <ei:ChangePropertyAction TargetObject="{Binding Mode=OneWay}" PropertyName="SelectedDirection" Value="{x:Static Enums:DirectionEnum.Left}" />
    </ei:DataTrigger>
    </i:Interaction.Triggers>
    </RadioButton>

    <RadioButton
    x:Name="RightRadioButton"
    Margin="5"
    Content="Right"
    >
    <i:Interaction.Triggers>
    <ei:DataTrigger Binding="{Binding IsChecked, ElementName=RightRadioButton}" Value="True">
    <ei:ChangePropertyAction TargetObject="{Binding Mode=OneWay}" PropertyName="SelectedDirection" Value="{x:Static Enums:DirectionEnum.Right}" />
    </ei:DataTrigger>
    </i:Interaction.Triggers>
    </RadioButton>

我的 View 模型非常简单:MainViewModel.cs

public class MainViewModel : ViewModelBase
{
private DirectionEnum _selectedDirection;

public DirectionEnum SelectedDirection
{
get { return _selectedDirection; }
set
{
if (_selectedDirection != value)
{
_selectedDirection = value;
RaisePropertyChanged();
}
}
}
public MainViewModel()
{
SelectedDirection = DirectionEnum.Up;
}
}

正如您从代码中看到的那样,应该已经检查了“Up”RadioButton...我错过了什么?

最佳答案

对我来说,一个常见的解决方案是使用包含选择行为的列表框,并覆盖模板以将项目绘制为单选按钮。

我的 XAML 模板通常看起来像这样:

<Style x:Key="RadioButtonListBoxStyle" TargetType="{x:Type ListBox}">
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="KeyboardNavigation.DirectionalNavigation" Value="Cycle" />
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="{x:Type ListBoxItem}" >
<Setter Property="Margin" Value="2, 2, 2, 0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border Background="Transparent">
<RadioButton
Content="{TemplateBinding ContentPresenter.Content}" VerticalAlignment="Center"
IsChecked="{Binding Path=IsSelected,RelativeSource={RelativeSource TemplatedParent},Mode=TwoWay}"/>

</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
</Style>

样式应用如下:

<ListBox ItemsSource="{Binding Directions}"
SelectedValue="{Binding SelectedDirection}"
Style="{StaticResource RadioButtonListBoxStyle}" />

我发现与在我的代码隐藏中维护大量 IsChecked 属性或使用转换器相比,管理分组 RadioButton 的选择行为要简洁得多。

关于c# - 将 RadioButtons 绑定(bind)到单个属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28571283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com