2011-02-25 112 views
1

我想從itemssource中預先選擇一個組合框(選擇一個現有項目)。這是我的類模型和xaml語法。WPF Combobox - 預選項目

Class ViewModelSample 
{ 
Public List<Animal> Animals; 
Public LivingBeing LivingBeingInst {get; set;} 
} 

Class LivingBeing 
{ 
    Public Animal AnimalInst {get; set;} 
} 

-------------------------------------------------------------------- 
<Combobox ItemsSource={Binding Animals} SelectedItem={Binding LivingBeingInst.AnimalInst} 
DisplayMemeber = SomePropertyInAnimal> 
-------------------------------------------------------------------------- 

但這並不奏效。我想要的是,當xaml出現時,我需要使用SelectedItem中給出的項目預先選擇組合框。

任何幫助,非常感謝。謝謝你,瑪尼

回答

2

通常情況下,你的ViewModel和SelectedAnimal屬性有一個List(在你的情況下爲動物),就你的情況而言,LivingBeingInst屬性應該是列表中的選定動物。

爲了得到像這樣的工作,你可能需要編寫一些代碼來將LivingBeing轉換成動物並通過ValueConverter返回。

但是,我相信你最好的選擇是創建一個SelectedAnimal屬性來存儲選定的動物。

在您的構造函數或最初填充動物列表的位置,您可以將SelectedAnimal設置爲列表中的第一個元素。

+0

不,我已將SelectedItem設置爲LivingBeingInst.AnimalInst。這裏不需要任何轉換器。 AnimalInst是列表中的值之一,但組合框仍然默認不顯示selecteditem。 – 2011-02-26 00:08:19

+0

轉換器在這裏沒有幫助。需要預先選擇的「動物」實例需要在「動物」集合中進行預選。 – 2015-04-20 15:51:00

0

您沒有在這些類中實施更改通知。所以除非你在相應類的構造函數中填充了所有這些屬性,否則綁定無法知道你已經這樣做了。

至少,這是我從你發佈的非工作的,不可編譯的,不是真的代碼的猜測。一般來說,如果您發佈實際代碼,您會得到更多有用的答案,特別是如果您花時間實施仍然存在您嘗試解決的問題的現有代碼的最小最小子集。 (除此之外,當你這樣做時,你可能會自己找到答案。)

+0

感謝您的輸入,我解決了這個問題。我實施了INotifyPropertyChanged,但那不是問題。組合框的SelectedItem應該是ItemsSource中給出的COllection中的一個值。雖然AnimalInst是Animal類型,但它不是ItemsSource中的對象之一。所以我做的是, – 2011-02-27 15:10:10

+0

是的,那是另一種可能性。您會注意到,無法從您發佈的代碼中知道這是問題所在。 – 2011-02-27 20:05:50

3

感謝您的輸入,我解決了這個問題。我實施了INotifyPropertyChanged,但那不是問題。

組合框的SelectedItem應該是ItemsSource中給出的集合中的一個值。雖然AnimalInst是Animal類型,但它不是ItemsSource中的對象之一。所以我做的是,宣佈SelectedAnimal屬性,將其綁定到SelectedItem。 「SelectedAnimal」將從「Animals」集合中比較AnimalInst.Name返回相同的實例。如下所示。 (時間表是收集)。

private ISchedule _selectedSchedule; 
     public ISchedule SelectedSchedule 
     { 
      get 
      { 
       if(_selectedSchedule != null) 
       { 
        var schedule = this.Schedules.Where(item => item.GlobalCodesId == _selectedSchedule.GlobalCodesId).FirstOrDefault(); 
        return schedule; 
       } 
       return _selectedSchedule; 
      } 
      set 
      { 
       _selectedSchedule = value; 
       base.NotifyPropertyChanged("SelectedSchedule"); 
      } 
     } 
+0

我認爲這幾乎是我說的。 – SergioL 2011-02-28 15:27:34

1

SelectedItem的初始值必須是一個對象,它是的組合框的ItemsSource一個構件的一個實例。在此示例中,LivingBeingInst.AnimalInst需要位於Animals集合中。

您還可以找到Animals集合中LivingBeingInst.AnimalInst相應項目的屬性,例如Everything Matters的答案的確如此。