wpf 项目源更改后保持单选

svgewumm  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(86)

设置:

我有一个组合框,它的itemsource绑定到一个自定义类的ObservableCollection,其中一个属性是List。
我有一个itemscontrol,它被绑定到组合框的selected item List属性。
ItemsControl DataTemplate创建一个单选按钮列表,每个单选按钮表示列表中的各个枚举值。

欲望:

当我改变组合框中的值时,itemscontrol源被更新。我想发生的是,如果新itemscontrol源中的单选按钮与先前列表中选定的单选按钮相同(在更新之前),则将选中此选项。

当前想法:

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

问题:

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

首选答案:

如果可能的话,帮助纠正绑定语法。
有更合适的方法来达到我的目的。

ny6fqffe

ny6fqffe1#

我也不知道如何在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.    
}

相关问题