2010-06-02 107 views
1

爲什麼我的組合框彈出菜單中的第一個元素在所選項目區域未顯示WPF:與selecteditem設置的組合框不使用SelectedIndex = 0?

我的組合框,當我使用SelectedItem綁定?沒有,它顯示了?使用

相同的代碼selecteditem + selectedindex是沒有問題的!

<ComboBox 
     ItemsSource="{Binding SchoolclassSubjectViewModels}" 
     SelectedItem="{Binding SelectedSchoolclassSubjectViewModel}" 
     SelectedIndex="0" 
     Height="23" 
     HorizontalAlignment="Left" 
     Margin="375,13,0,0" 
     VerticalAlignment="Top" 
     Width="151"> 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding SchoolclassName}" /> 
        <TextBlock Text=" " /> 
        <TextBlock Text="{Binding SubjectName}" /> 
       </StackPanel> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
    </ComboBox> 

那麼作爲解決方法我用:

SchoolclassSubjectViewModels.Add(schoolclassSubjectVM); 
     SelectedSchoolclassSubjectViewModel = schoolclassSubjectVM; 

這:

SelectedItem="{Binding SelectedSchoolclassSubjectViewModel,Mode=TwoWay}" 

,但我寧願XAML唯一途徑,因爲它應該真正發揮作用。

回答

2

這是因爲ItemsSource集合中的引用與SelectedItem屬性中的引用不同。我冒昧猜測您正在使用一個對象上下文來查詢您的數據庫,以查找ItemsSource綁定的SchoolclassSubject對象列表,而另一個上下文用於查詢綁定SelectedItem的實際數據項。即使列表包含一個引用,該引用表示您的對象所持有的值,但它不是真正的同一個引用,而是同一個數據的單獨實例。

有辦法解決這個問題,其中大多數涉及使用SelectedValuePathSelectedValue而不是SelectedItem屬性,但具體的解決方案會有所不同,具體取決於您特定的ORM。

+0

我使用sqlite數據庫與SQL純沒有ORM。 第一段聽起來很混亂XD。 你說的不是真的,也許......,因爲我只是在我的代碼這個發現: <組合框 的SelectedItem = 「{結合SelectedSchoolclass}」 的SelectedIndex = 「0」 的DisplayMemberPath = 「SchoolclassName」 的ItemsSource =「{Binding Schoolclasses}」 /> viewmodel中的綁定與上述代碼中的模式相同。不同之處在於我沒有特別定義的ComboBox itemtemplate。 – msfanboy 2010-06-02 20:17:29

相關問題