C# DataGridComboxColumn不显示SelectedItem
我有一个ViewModel(其结构的伪代码):C# DataGridComboxColumn不显示SelectedItem,c#,wpf,mvvm,C#,Wpf,Mvvm,我有一个ViewModel(其结构的伪代码): 类视图模型 { 公共列表包{get;set;} } 枚举类型 { 类型1, 类型2。。。。 } 类包 { 公共类型PackageType{get;set;} } 这就是我如何将DataGrid与ViewModel的属性包绑定的方法 <DataGrid ItemsSource="{Binding Packages}"> <DataGrid.Columns> <DataGridCo
类视图模型
{
公共列表包{get;set;}
}
枚举类型
{
类型1,
类型2。。。。
}
类包
{
公共类型PackageType{get;set;}
}
这就是我如何将DataGrid与ViewModel的属性包绑定的方法
<DataGrid ItemsSource="{Binding Packages}">
<DataGrid.Columns>
<DataGridComboBoxColumn ItemsSource="{Binding Source={StaticResource Types}}"
SelectedItemBinding="{Binding PackageType, Mode=TwoWay}">
</DataGridComboBoxColumn>
</DataGrid.Columns>
以下是我定义资源类型的方式:
<Window.Resources>
<CollectionViewSource x:Key="Types">
<CollectionViewSource.Source>
<ObjectDataProvider MethodName="GetNames" ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="s:Type"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</CollectionViewSource.Source>
</CollectionViewSource>
</Window.Resources>
DataGridComboxColumn可以显示组合框。但是,它不显示Package.PackageType的值。它的行为就像绑定只是到源的一种方式。当我更新组合框时,对象被更新。另一种方法不起作用
请帮忙。非常感谢。包需要实现INotifyPropertyChanged。如果您的包列表可能会更改,请改用ObservableCollection。让视图模型实现INotifyPropertyChanged不会有什么坏处
public class Package : INotifyPropertyChanged
{
private Type packageType;
public Type PackageType
{
get
{
return this.packageType;
}
set
{
if (this.packageType != value)
{
this.packageType = value;
this.NotifyPropertyChanged("PackageType")
}
}
}
// Implementation of INotifyPropertyChanged
...
}
谢谢你的回答。我做了更多的研究。事实证明,问题是当我定义
ObjectDataProvider
时。我需要改用MethodName=“GetValues”
。试试SelectedValueBinding
而不是selectedtembinding
。@鞋子不起作用,组合框在我更改后立即失去价值。你可以试试DataTemplateColumn
,看看一个普通的组合框是否可以容纳我,谢谢你的回答。我做了更多的研究。事实证明,问题是当我定义ObjectDataProvider时。我需要改用MethodName=“GetValues”
public class Package : INotifyPropertyChanged
{
private Type packageType;
public Type PackageType
{
get
{
return this.packageType;
}
set
{
if (this.packageType != value)
{
this.packageType = value;
this.NotifyPropertyChanged("PackageType")
}
}
}
// Implementation of INotifyPropertyChanged
...
}