2015-10-06 108 views
0

我有一個包含下面的類的實例的列表:WPF組合框結合和的SelectedItem

namespace Foo.InformationModel.Reference 
{ 
    public class ReferenceCodeTypeChar 
    { 
     public ReferenceCodeTypeChar(); 

     public string Category { get; set; } 
     public string CodeValue { get; set; } 
     public string Description { get; set; } 
     public string Value { get; set; } 
    } 
} 

在這裏的是,被用作DataContext對於其中該組合框是窗口及其相關屬性的對象:

public class MyObject 
{ 
    public List<Foo.InformationModel.Reference.ReferenceCodeTypeChar> ProgramTypes() {...} 

    private string _selectedProgramTypeCode; 
    public string SelectedProgramTypeCode 
    { 
     get 
     { 
      return _selectedProgramTypeCode; 
     } 
     set 
     { 
      if (_selectedProgramTypeCode != value) 
      { 
       _selectedProgramTypeCode = value; 
       OnPropertyChanged("SelectedProgramTypeCode"); 
      } 
     } 
    } 
} 

這裏是後面的XAML代碼的組合框:

<ComboBox ItemsSource="{Binding Path=ProgramTypes}" 
      SelectedItem="{Binding Path=SelectedProgramTypeCode, Mode=TwoWay}" 
      DisplayMemberPath="Description" 
      SelectedValuePath="Value"/> 

問題發生在SelectedProgramTypeCode內。 「value」變量的值是Foo.InformationModel.Reference.ReferenceCodeTypeChar,而不是ReferenceCodeTypeChar對象的期望的Value屬性字符串。哪裏不對?

+0

@Hopeless你應該寫這個作爲答案,因爲它是真的。 –

+0

我錯了,快速瀏覽一下XAML。看起來像'SelectedItem'是綁定錯誤的。它應該綁定到一個'Foo.InformationModel.Reference.ReferenceCodeTypeChar'類型的屬性,在這種情況下你可以將它綁定到一個字符串屬性。從'SelectedItem'到'SelectedProgramTypeCode'的方式,沒有Converter,所以'ToString()'將在'SelectedItem'上被調用並解析爲''Foo.InformationModel.Reference.ReferenceCodeTypeChar「',然後被設置爲'SelectedProgramTypeCode '(所以你可以在'value'變量中看到它)。 – Hopeless

回答

-1

你應該在你的XAML已經使用SelectedValue代替SelectedItem

<ComboBox 
    ItemsSource="{Binding Path=ProgramTypes}" 
    SelectedValue="{Binding Path=SelectedProgramTypeCode, Mode=TwoWay}" 
    DisplayMemberPath="Description" 
    SelectedValuePath="Value" />