我有以下视图模型:
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
...
我的错误在哪里?我尝试使用SelectedItemBinding
和SelectedValueBinding
,但问题相同。从下拉菜单中没有任何选择。
要清楚:
对于文件,我设置了一个类别,但未选择任何内容:
但是下拉菜单中有以下项目:
答案 0 :(得分:0)
CategoryViewModels
中MainViewModel
的实例可能与FileViewModels
中的实例不同。
您应该在Equals
类中覆盖GetHashCode
和CategoryViewModel
,或者确保将每个Category
的{{1}}属性设置为{{ 1}}实际上存在于FileViewModel
的{{1}}数组中。