C# 如何将两个目标属性绑定到单个源属性?

C# 如何将两个目标属性绑定到单个源属性?,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,我有一个非常复杂的UI问题,涉及两组单选按钮。 在任何给定时间,只能启用一个组。但是,每个组都可以有一个不同的选中按钮 这些单选按钮都影响相同的源属性,该属性存储1到5之间的整数值。但是,我只想在RadioButton同时启用和选中时,将新值传播到source属性 由于用户界面允许选中禁用的单选按钮,因此当选中的单选按钮也重新启用时,应更新源属性 下面是一幅演示UI布局的图像: (组1已启用,复选框1已选中;组2已禁用) 现在,这原本看起来像是一个IMultiValueConverter的工作

我有一个非常复杂的UI问题,涉及两组
单选按钮。
在任何给定时间,只能启用一个组。但是,每个组都可以有一个不同的选中按钮

这些
单选按钮
都影响相同的源属性,该属性存储1到5之间的整数值。但是,我只想在
RadioButton
同时启用和选中时,将新值传播到source属性

由于用户界面允许选中禁用的
单选按钮
,因此当选中的单选按钮
也重新启用时,应更新源属性

下面是一幅演示UI布局的图像:

(组1已启用,复选框1已选中;组2已禁用)

现在,这原本看起来像是一个
IMultiValueConverter
的工作,但是有一些复杂的地方使它变得相当复杂:

  • 传播仅在一个方向上发生,单向源
  • IMultiValueConverter
    不允许将多个目标属性转换为一个源属性
由于上述看似矛盾的约束,使用
imultivalueconverter
是没有意义的。这是因为
ConvertBack
方法只允许1个目标属性;源属性值是结果

在我的场景中,
RadioButton.IsEnabled
RadioButton.IsChecked
是必须转换为整数值的两个目标属性,我希望将其作为
ConverterParameter
传递

上图的数据模型有两个显著的属性(不应该有更多的属性):

  • 组号
  • 严重性(这是与嵌套的
    单选按钮相对应的整数)
那么,在这种情况下我能做些什么呢?我的目标是只修改应用程序的视图组件

编辑
单选按钮的XAML

<RadioButton Name="Group1" GroupName="OuterGroup" IsChecked="True">
    <DockPanel>
        <TextBlock DockPanel.Dock="Top" Text="Group 1"/>
        <StackPanel IsEnabled="{Binding RelativeSource={RelativeSource AncestorType={x:Type RadioButton}}, Path=IsChecked}" Orientation="Horizontal">
            <RadioButton Content="1" GroupName="Group1" />
            <RadioButton Content="2" GroupName="Group1" />
            <RadioButton Content="3" GroupName="Group1" />
            <RadioButton Content="4" GroupName="Group1" />
            <RadioButton Content="5" GroupName="Group1" />
        </StackPanel>
    </DockPanel>
</RadioButton>

<!--Group2 is the same...-->


[可选]问题的应用: 在我的程序中,有3个外部
单选按钮
。每个
单选按钮
对应于一种情绪:快乐、悲伤或冷漠。数字1到5用于识别情绪的快乐或悲伤程度;描述冷漠的强度是没有意义的(部分悲伤,但更快乐,表明情绪类型应该是快乐的,而不是冷漠)

也就是说,真实数据模型中有两个属性:

  • MoodType
  • 严重性

也许这可以让我更深入地了解为什么我要将多个目标绑定到一个源。;)

当检查可呼吸组中的任何项目时,您是否可以检查外部组(快乐、悲伤、冷漠)?也就是说,如果我在“快乐”中单击3,那么“快乐”将被选中。通过这种方式,您可以将所有组中的项目绑定到Severity属性,MoodType将自动更新。当选中外部的单选按钮时,嵌套的单选按钮将启用。内部
单选按钮
构成外部
单选按钮
的内容。我将发布此行为的相关XAML。我的意思是,如果您将它们全部启用,并且如果用户在任何组中检查严重性,您将选择该组。这样,外部单选按钮的工作原理更像是选择什么情绪的指示器。此外,用户只需点击一次就可以知道自己的情绪和严重程度,这将需要为每个组设置一个
严重程度
属性。我正在尝试只使用一个属性(也许我需要更改它)。这是因为用户可以在不更改特定组的
严重性的情况下切换所选组。此外,我认为UI从取消选择的情绪类型的灰显外观中获益。是的,这是一个额外的点击,但它会更生动地向用户显示所选的情绪类型。您可以突出显示当前选定的组并完全删除外部RadioButton。所以,若用户认为他为3感到高兴,他只需在“高兴”上点击3即可(而“高兴”被选中)。您可以将所有内部按钮绑定到单个严重性属性,但也可以将MoodType绑定到当前活动组。值得一试吗?