2014-01-17 46 views
1

我有一個視圖模型(僞其結構代碼):DataGridComboBoxColumn不顯示的SelectedItem

class ViewModel 
{ 
    public List<Package> Packages { get; set; } 
} 
enum Type 
{ 
    Type1, 
    Type2, .... 
} 
class Package 
{ 
    public Type PackageType { get; set; } 
} 

這是我怎麼綁定我的DataGrid與視圖模型的財產包。

<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> 

DataGridComboBoxColumn可以顯示組合框。但是,它不顯示Package.PackageType的值。它的行爲就像綁定只是一種方式來源。當我更新組合框時,對象被更新。另一種方式不起作用。

請幫忙。非常感謝。

+0

嘗試'SelectedValueBinding'而不是'SelectedItemBinding' – Shoe

+0

@Shoe無法正常工作,組合框在我改變它後立即丟失值。 –

+0

您可以嘗試使用'DataTemplateColumn'並查看常規組合框是否會採用它 – Shoe

回答

1

感謝您的所有答案。我做了更多的研究。問題出在我定義ObjectDataProvider時。我需要使用MethodName="GetValues"代替。

0

包需要實現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 
    ... 
} 
+0

嗨,大家好,謝謝所有答案。我做了更多的研究。問題出在我定義ObjectDataProvider的時候。我需要使用MethodName =「GetValues」 –

相關問題