Выберите элемент из поля со списком WPF из представления модели в C # WPF - PullRequest
0 голосов
/ 04 июля 2019

У меня есть следующий вид модели:

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, означает, что столбец Category в Datagrid пуст.

Я ожидал автоматического выбора из выпадающего списка с корреспондентом Category ...

Где моя ошибка? Я пытался с SelectedItemBinding и SelectedValueBinding, но та же проблема. Ничего не выбрано из выпадающего списка.


Для уточнения:

Для файла я установил категорию, но ничего не выбрано:

enter image description here

Но в выпадающем списке есть предметы:

enter image description here

1 Ответ

0 голосов
/ 04 июля 2019

Вероятно, в вашем MainViewModel есть другие экземпляры CategoryViewModels по сравнению с FileViewModels.

Вы должны либо переопределить Equals и GetHashCode в своем классе CategoryViewModel, либо убедиться, что вы установили для свойства Category каждого FileViewModel значение CategoryViewModel, которое фактически присутствует в массиве CategoryViewModel[] MainViewModel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...