【问题标题】:Mainaining radio selection after item source change在项目源更改后维护无线电选择
【发布时间】:2010-04-15 15:23:24
【问题描述】:

设置:

我有一个组合框,它的 itemsource 绑定到自定义类的 ObservableCollection,一个属性是 List

我有一个 itemscontrol,它数据绑定到组合框的选定项 List 属性。

itemscontrol 数据模板创建一个单选按钮列表,每个单选按钮代表列表中的单个枚举值。

愿望:

当我更改组合框中的值时,itemscontrol 源会更新。我想要发生的是,如果新 itemscontrol 源中的单选按钮与上一个列表中选择的单选按钮相同(在更新之前),则需要检查。

当前想法:

为单选按钮分配一个 Checked 事件,该事件在窗口类中维护一个可与之比较的 myenum 属性。使单选框的 IsChecked 属性绑定到转换器并与 myenum 属性进行比较。为了实现这一点,我让窗口类从 IValueConverter 扩展,这样转换器函数就可以访问 myenum 属性。

问题:

我不知道如何让 IsChecked 绑定将窗口用作转换器。我尝试在绑定的转换器部分使用相对源,但这不起作用 IsChecked="{Binding Converter={RelativeSource={RelativeSource Self}}}"

首选答案:

如果可能的话,协助更正绑定语法。

关于实现我想要的更合适方式的想法。

【问题讨论】:

    标签: wpf data-binding radio-button


    【解决方案1】:

    我也不知道如何将窗口用作 xaml 中的值转换器。而是为枚举类型创建一个具有公共属性的独立值转换器类。接下来,在窗口的构造函数中,获取对值转换器实例的引用并将其存储在私有成员中。

    XAML:

    <local:MyValueConverter x:Key="ConvertSomething" />
    

    后面的代码:

    private MyValueConverter _myValueConverter;
    
    public Window1()
    {
      InitializeComponent();
    
      _myValueConverter = FindResource("ConvertSomething") as MyValueConverter;
    }
    
    private void RadioButton_Checked(object sender, RoutedEventArgs e)
    {
        // You can access _myValueConverter here and set its public enum property.    
    }
    

    【讨论】:

    • 这是我最后走的路线。还必须将绑定更改为 Mode=OneWay。但现在一切正常。
    猜你喜欢
    • 2011-07-27
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多