视图模型中的绑定属性更新时,视图中的WPF组合框不更新

wj8zmpe1  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(171)

我在一个视图中有一个组合框,它绑定到一个视图模型,该视图模型带有我的一个自定义类的ObservableCollection。这个自定义类只是一个Enum的 Package 器,它保存值和一个字符串,字符串是enum的描述属性。组合框将DisplayMemberPath属性设置为这个name属性,以显示更容易理解的描述属性值,而不是enum本身
我发现,当我将组合框的ItemsSource设置为这些Enum Package 类的集合,然后将SelectedItem属性设置为这些项之一时,当我启动应用程序时,UI中的组合框没有更新。如果我将其更改为字符串列表,它似乎可以工作。
下面是我的组合框:

<ComboBox
        DisplayMemberPath="Name"
        IsEditable="False"
        IsReadOnly="True"
        ItemsSource="{Binding SelectableTags}"
        SelectedItem="{Binding SelectedTag, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

我的自定义类组合框绑定到一个集合:

public class EnumNamePair : ObservableObject
{
    private string name;
    public string Name
    {
        get => name;
        set => SetProperty(ref name, value);
    }

    private Enum enumValue;
    public Enum EnumValue
    {
        get => enumValue;
        set
        {
            SetProperty(ref enumValue, value);
            Name = enumValue.GetEnumDescription();
        }
    }

    public EnumNamePair(Enum enumValue)
    {
        EnumValue = enumValue;
    }
}

我的视图模型的一部分:

private ObservableCollection<EnumNamePair> selectableTags = new();
public ObservableCollection<EnumNamePair> SelectableTags
{
    get => selectableTags;
    set => SetProperty(ref selectableTags, value);
}

private EnumNamePair selectedTag;
public EnumNamePair SelectedTag
{
    get => selectedTag;
    set => SetProperty(ref selectedTag, value);
}

public TaggingRuleViewModel(string tag)
{
    SelectableTags = new List<EnumNamePair>(
        Enum.GetValues(typeof(AllowedTag)).Cast<AllowedTag>().Select(x => new EnumNamePair(x)));

    SelectedTag = SelectableTags.First(x => x.EnumValue.ToString() == tag),
}

我已经尝试过为我的绑定属性增加OnPropertyChanged,改变组合框上的Readonly/Editable属性设置器,简化我的视图模型/自定义类(它曾经有一个单独的getter用于name属性,而不是在设置EnumValue等时设置)。所有看起来有效的是将我的自定义类的列表更改为字符串列表,我知道还有其他方法可以处理在组合框中显示枚举描述属性的问题,但现在我只想知道为什么这样做不起作用。

相关问题