从组合框WPF中从C#WPF中的视图模型中选择项目

时间:2019-07-04 12:17:51

标签: c# wpf

我有以下视图模型:

public sealed class FileViewModel : AbstractPropNotifier
{
    private string _path;
    private CategoryViewModel _category;

    public string Path
    {
      get
      {
        return _path;
      }
      set
      {
        _path = value;
        OnPropertyChanged(nameof(Path));
        OnPropertyChanged(nameof(Title));
      }
    }

    public string Title => System.IO.Path.GetFileNameWithoutExtension(Path);

    public CategoryViewModel Category
    {
      get
      {
        return _category;
      }
      set
      {
        _category = value;
        OnPropertyChanged(nameof(Category));
      }
    }
}

和“类别”视图模型:

public sealed class CategoryViewModel : IEquatable<CategoryViewModel>
{
    public string Title { get; set; }

    public EMyEnum Value { get; set; }

    public bool Equals(CategoryViewModel other)
    {
       return Title.Equals(other.Title) && Value == other.Value;
    }


    public static CategoryViewModel From(EMyEnum eCat)
    {
       return new CategoryViewModel
       {
          Title = eCat.DescriptionAttr(),
          Value = eCat
       };
    }
}

我将数据上下文设置为我的视图模型,例如:

public sealed class MainViewModel
{
    public MainViewModel()
    {
      Files = new ObservableCollection<FileViewModel>();
      Categories = GetCategories();
    }

    public ObservableCollection<FileViewModel> Files { get; set; }

    public CategoryViewModel[] Categories { get; set; }

    private CategoryViewModel[] GetCategories()
    {
      var enums = Enum.GetValues(typeof(EMyEnum));
      var list = new List<CategoryViewModel>();

      foreach (var en in enums)
      {
        EMyEnum cat = (EMyEnum)en;
        list.Add(CategoryViewModel.From(cat));
      }

      return list.ToArray();
    }
}

_model = new MainViewModel();
DataContext = _model;

和XAML:

<Window.Resources>
    <CollectionViewSource x:Key="Categories" Source="{Binding Categories}"/>
</Window.Resources>

DataGrid元素

<DataGridComboBoxColumn SelectedItemBinding="{Binding Category}" ItemsSource="{Binding Source={StaticResource Categories}}" Header="Category" Width="2*" DisplayMemberPath="Title"/>

该下拉列表已正确填充,但无法从下拉列表中自动选择特定的Category,这意味着Datagrid的Category列为空。

我希望从下拉菜单中自动选择对应的Category ...

我的错误在哪里?我尝试使用SelectedItemBindingSelectedValueBinding,但问题相同。从下拉菜单中没有任何选择。


要清楚:

对于文件,我设置了一个类别,但未选择任何内容:

enter image description here

但是下拉菜单中有以下项目:

enter image description here

1 个答案:

答案 0 :(得分:0)

CategoryViewModelsMainViewModel的实例可能与FileViewModels中的实例不同。

您应该在Equals类中覆盖GetHashCodeCategoryViewModel,或者确保将每个Category的{​​{1}}属性设置为{{ 1}}实际上存在于FileViewModel的{​​{1}}数组中。