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

时间:2014-09-17 19:25:00

标签: c# wpf xaml data-binding

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

这些RadioButtons都会影响相同的source属性,该属性存储一个介于1到5之间的整数值。但是,我只想在RadioButtonRadioButtons时将新值传播到source属性已启用已选中

由于用户界面允许已禁用 RadioButton 已选中,因此在已选中 {{时,应更新源属性1}} 重新启用

这是展示UI布局的图像:
RadioButton layout
(组1已启用,框1已选中;组2已禁用)

现在,这最初似乎是IMultiValueConverter的工作,但是有一些错综复杂使得这个相当复杂:

  • 传播只发生在一个方向, OneWayToSource
  • IMultiValueConverter不允许将多个目标属性转换为一个源属性。

由于上述看似矛盾的约束,使用IMultiValueConveter没有意义。这是因为ConvertBack方法只允许1个目标属性;源属性值是结果。

对于我的方案,RadioButton.IsEnabledRadioButton.IsChecked是必须转换为整数值的两个目标属性,我希望将其作为ConverterParameter传递。

上图中的数据模型有两个值得注意的属性(并且不应该有更多):

  • GroupNumber
  • 严重性(这是与嵌套RadioButton对应的整数)

那么,在这样的情况下我该怎么办?我的目标是只修改应用程序的视图组件。

编辑:RadioButtons的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个外RadioButtons。每个RadioButton对应一种情绪:快乐,悲伤或无动于衷。数字1到5用于识别情绪的快乐或悲伤;描述冷漠的强度是没有意义的(部分悲伤,但更快乐,表明情绪类型应该是幸福的,而不是无动于衷的。)

话虽如此,真实数据模型中有两个属性:

  • MoodType
  • 严重性

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

0 个答案:

没有答案