我會盡量解釋儘可能簡明。我有兩個對象,第一個我們將調用具有Id屬性的對象A,第二個對象將調用具有ParentId屬性的對象B.明顯的關係是對象B的ParentId被設置爲對象A的Id屬性。我使用的MVVM模式,所以在視圖模型我有2個ObservableCollections,一個包含對象A中的其他對象B.在建設中的視圖模型中,我創建並填充的ObservableCollection <「A」>命名listItems中。我的XAML很簡單,奇綁定行爲在WPF
<StackPanel>
<ListBox IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding ListItems}">
</ListBox>
<ComboBox SelectedValuePath="ParentId" SelectedValue="{Binding Path=ListItems/Id, Mode=OneWay}" ItemsSource="{Binding ComboItems}">
</ComboBox>
<Button Click="Button_Click" Content="Push Me"/>
</StackPanel>
正如你所看到的組合框的的SelectedValue綁定到當前listItems中的項目的ID屬性。所以基本上,列表框和組合框都在主要細節中。
如果您按下按鈕,它將填充名稱ComboItems的ObservableCollection <'B'> ComboItems,然後填充組合框。現在,這是奇怪的開始。當我啓動程序時,如果我唯一要做的就是按下按鈕,然後在列表框中選擇一個項目,由於SelectedValue綁定,組合框將正確選擇一個項目。但是,如果我啓動程序並首先在列表框中選擇一個項目,然後按下按鈕,則當前的組合框項目不會隨當前的列表框項目而改變。綁定似乎永遠被打破。有誰知道爲什麼發生這種情況?
詩篇。如果我在設置SelectedValue/SelectedValuePath之前在組合框上設置ItemsSource,則主/細節綁定將無法工作。我知道xaml有命令,但這似乎有點脆弱。所以如果有人也有這個意見,我全都聽過。
感謝,內特
編輯 -
當綁定的SelectedValue,這是非常脆弱的。如果綁定正在工作,即沒有選擇列表框中的任何內容,然後填充組合框,如果您選擇組合框中的項目,綁定將會中斷。在浪費了很多時間之後,我選擇了綁定SelectedItem。這種綁定在我之前指定的任何條件下都不會中斷。然而,我會回答爲什麼SelectedValue綁定如此荒謬。再次感謝所有已經回答或將會回答的問題。
感謝您的回答。我看到這是如何適用於您在xaml中綁定綁定的順序,但我不確定它適用於我的第一個問題,即與在填充組合框之前在列表框中選擇項目有關的問題。在這種情況下,組合框綁定的ObservableCollection永遠不會被替換,但只能填充數據,所以我不明白/認爲SelectedValue綁定會被清除。謝謝你回答我的第二個問題。這似乎是奇怪的設計,但我想owell。 – NastyNateDoggy 2010-01-12 16:31:21
這看起來確實很奇怪。也許你的ListItems集合受到某種程度的影響。您似乎將IsSynchronizedWithCurrentItem設置爲true,這意味着它會將您的集合的CurrentItem匹配到最初將爲null的SelectedItem。也許這會重置您的ListBox中的選定項目? – Arcturus 2010-01-13 08:26:11
我把這個標記爲答案,即使我覺得它沒有完全回答我的問題。閱讀我上面的編輯,看看我的最終解決方案。 – NastyNateDoggy 2010-02-16 23:34:39