【问题标题】:Using control properties in DataBinding在 DataBinding 中使用控件属性
【发布时间】:2019-07-15 02:41:03
【问题描述】:

我有许多单选按钮,用于更改选项,通过绑定到带有命令参数的命令,如下所示:

<RadioButton
  Content="Option1"
  Command="{Binding ChangeOption}
  CommandParameter="Option1" />

更改选项的代码是视图模型非常简单:

public property SelectedOption { get; set; }

public void ChangeOption(string option)
{
    SelectedOption = option;
}

这有点简化,但它几乎描述了这个概念。我缺少的是,根据SelectedOption 属性来决定是否选中单选按钮。我想将此属性与RadioButtonContent(或CommandParameter)进行比较。这应该在触发器中完成,然后可以更改 IsSelected 属性。

问题是,我不知道如何访问数据触发器中的ContentCommandParamater。我被困在这样的事情上:

<Style.Triggers>
  <DataTrigger Binding={Binding SelectedOption} Value="?????">
    <Setter Property="IsChecked" Value="True" />
  </DataTrigger>
</Style.Triggers>

我应该在数据触发器的Value 参数中放入什么,以便将其与所选选项进行比较?

【问题讨论】:

  • 如果这是一个包含单选按钮的 itemtemplate 的列表框,那么您只需将 IsSelected 绑定到 IsChecked 并将列表框的 selecteditem 绑定到 SelectedOption。以及内容的选项,这将避免任何“魔术字符串”不匹配问题。因此,魔术字符串是不好的做法。
  • 如果你的选项是enum的值,你可以考虑关注this approach
  • @Andy 我没有想到这一点,但它实际上可能是解决问题的最佳方法。谢谢。

标签: c# wpf xaml radio-button datatrigger


【解决方案1】:

这种方法可能会让您感到头疼。

我建议为这些单选按钮创建一个新类:

public class OptionSelection
{
    public bool IsSelected {get; set;}
    public string Option {get; set;}
}

然后您可以创建这些项目的 ObservableCollection 或 List 并使用 ItemsControl 显示它们,绑定到 Option(使用 Label 或 TextBlock)和 IsSelected(使用 RadioButton)。

在此对象中实现 INotifyPropertyChanged 也很重要,这样 XAML 绑定会相应更新。

【讨论】:

  • 感谢您的建议。我希望避免这样的事情,但似乎没有简单的解决方法:-)
猜你喜欢
  • 2017-02-12
  • 1970-01-01
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 2011-11-13
相关资源
最近更新 更多