C# DataGridComboxColumn不显示SelectedItem

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

我有一个ViewModel(其结构的伪代码):

类视图模型
{
公共列表包{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
    ...
}