WPF MVVM框架下 DateGrid绑定了一个数据源,自定义的列 DataGridComboBoxColumn的绑定下拉选中的能不能绑定枚举类型
时间: 2024-09-11 19:12:47 浏览: 54
在WPF的MVVM架构中,如果你想要在`DataGrid`的`DataGridComboBoxColumn`中绑定一个枚举类型的值,并且这个选择可以反映到数据源上,你可以这样做:
首先,你需要创建一个`ICollectionView`或`ICollectionViewSource`来管理你的数据,并将枚举类型转换为字符串显示在下拉列表中。在ViewModel中,定义一个枚举类型的属性并提供它的字符串表示形式。
例如,假设你有一个`MyEnum`枚举和对应的`MyObject`类,它们之间的关联可以通过一个转换函数实现:
```csharp
public enum MyEnum
{
Option1,
Option2,
Option3
}
private string _selectedOption;
public string SelectedOption
{
get { return _selectedOption; }
set { SetProperty(ref _selectedOption, value); }
}
public object GetSelectedOptionValue()
{
switch (SelectedOption)
{
case "Option1":
return MyEnum.Option1;
// 添加其他选项的映射...
}
}
```
然后,在`DataGrid`的`ItemsSource`中设置为你处理过的数据源,比如:
```xaml
<DataGrid ItemsSource="{Binding DataSource}">
<DataGrid.Columns>
<DataGridComboBoxColumn Header="Custom Column"
Binding="{Binding Path=SelectedOption, ElementName=dataGrid}"
DisplayMemberPath="DisplayName"
SelectedValuePath="Value" />
</DataGrid.Columns>
</DataGrid>
```
在这里,`DataSource`是一个`ICollectionView`,`DisplayMemberPath`用于获取枚举的文本表示,`SelectedValuePath`用于获取实际的枚举值。
当你在`DataGridComboBoxColumn`中选择一个选项时,`SelectedOption`的值会被更新,同时`GetSelectedOptionValue()`会返回相应的枚举值。
阅读全文