2016-04-25 75 views
0
<ComboBox 
    x:Name="comboBox" 
    Margin="281.4,160,259.995,159.958" 
    d:LayoutOverrides="Height" 
    ItemsSource="{Binding _US_STATES}" 
    SelectedIndex="0" 
    SelectedValue="{Binding SelectedState}" 
    SelectedValuePath="{Binding Path=_US_STATES/SHORT}" 
    > 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <Border Padding="2"> 
       <TextBlock Text="{Binding LONG}" /> 
      </Border> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

以上是我顯示的組合框的xaml版本。我可以正確顯示它,因爲它顯示正確的數據。當我嘗試獲取它被選中的值時,總是RxTracking.model.US_STATES不是它應該的值。wpf組合框SelectedValue獲取類名稱而不是屬性

的US_STATES看起來是這樣的:

public class US_STATES : ObservableObject 
{ 
    private string _long; 
    private string _short; 

    public string LONG 
    { 
     get { return _long; } 
     set { Set("LONG", ref _long, value); } 
    } 

    public string SHORT 
    { 
     get { return _short; } 
     set { Set("SHORT", ref _short, value); } 
    } 

    public static ObservableCollection<US_STATES> GetAllStates() 
    { 
     ObservableCollection<US_STATES> ALL = new ObservableCollection<US_STATES> 
     { 
      new US_STATES {LONG="ALABAMA",SHORT="AL" }, 
      new US_STATES {LONG="Alaska", SHORT = "AK"}, 
      new US_STATES {LONG = "Arizona", SHORT = "AZ"}, 
      etc ... 

我收到這是在錯誤窗口:

System.Windows.Data Error: 40 : BindingExpression path error: 'AL' property not found on 'object' ''US_STATES' (HashCode=8402670)'. BindingExpression:Path=AL; DataItem='US_STATES' (HashCode=8402670); target element is 'ComboBox' (Name='comboBox'); target property is 'NoTarget' (type 'Object') 

System.Windows.Data Error: 40 : BindingExpression path error: 'AL' property not found on 'object' ''US_STATES' (HashCode=15232780)'. BindingExpression:Path=AL; DataItem='US_STATES' (HashCode=15232780); target element is 'ComboBox' (Name='comboBox'); target property is 'NoTarget' (type 'Object') 
+0

[WPF IsEditable = true]的可能重複填充對象的組合框將ToString()顯示爲選定的項目](https://stackoverflow.com/questions/1844156/wpf-iseditable-true-combobox-filled-with-對象 - 顯示最的toString-AS-的) –

回答

1

SelectedValuePath屬性是一個字符串。它應該是要用於選定值的列表項類別的屬性名稱。

如果你想使用的US_STATESSHORT屬性,這很簡單:

SelectedValuePath="SHORT" 

這就是爲什麼它哭哭啼啼約'AL' property not found on 'object' ''US_STATES':綁定更新SelectedValuePath_US_STATES/SHORT值(這是「當前項目」 ,因爲它使用第一個,因爲ObservableCollection沒有CurrentItem屬性 - 即進入CollectionViewSource和ICollectionView,除非您正在對XAML中的東西進行排序或過濾,否則您不必擔心這些屬性),這是「 AL」。因此,ComboBox盡職地試圖找到不存在的US_STATESAL財產。

順便說一句,你可以抽出自己寫一個模板的麻煩,只需設置DisplayMemberPath

DisplayMemberPath="LONG" 
0

您需要設置顯示值屬性的組合框或在美國類重寫的ToString。

發生了什麼事情是組合框對存儲在其中的對象調用了ToString,並且如果ToString沒有被重寫,那麼它將返回類名稱。