我有一個TreeView,允許用戶選擇不同的項目。使用DataType將DataType設置爲適當的ViewModel類型來確定每個項目的顯示。 DataContext會根據樹視圖中選定的項目自動設置到相應的ViewModel。更改數據模板的數據上下文清除組合框選擇
這裏的問題:
其中的DataTemplates的已綁定一個ObservableCollection獲得項目的列表和屬性來獲取/設置的SelectedValue在視圖模型組合框。
當我選擇這種類型的一個項目,然後選擇另一個相同類型的項目時,ComboBox將顯示空白而不是正確的選定項目。看起來,組合框在轉換到新項目後立即將SelectedValue屬性設置爲NULL,然後從不更新。
<ComboBox Margin="1,0"
ItemsSource="{Binding ItemsToSelect}"
SelectedValue="{Binding SelectedValue}"
SelectedValuePath="ValuePath" DisplayMemberPath="DisplayPath"
IsEnabled="{Binding CanSelectItem}">
</ComboBox>
真是個奇怪的部分是,如果我選擇選擇同一類型的項目之間的不同類型的項目,它總是正確顯示。
我試着忽略了SelectedValue設置器中的NULL值,而且無論我是否也引發了PropertyChanged事件都不起作用。
private MyObject selectedValue;
public MyObject SelectedValue
{
get
{
return selectedValue;
}
set
{
if (value != null)
{
this.selectedValue = value;
}
this.OnPropertyChanged("SelectedValue");
}
}
縱觀類似的問題,而寫這使我,我還沒有發現一個有趣的屬性 - IsSynchronizedWithCurrentItem
從這個question。起初,我認爲這解決了這個問題,但是它只是在一定程度上改變了行爲。
將此屬性設置爲True
,組合框不完全清除其選擇,而只是將第一個項目標記爲選定項目。因此,現在將SelectedValue屬性設置爲列表中的第一項,而不是設置爲NULL。
任何人有任何解決方案的想法?
感謝您的回答。不幸的是,ComboBox.SelectedValue默認根據[MSDN](http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.selector.selectedvalue.aspx)綁定「TwoWay」 – davisoa 2012-03-22 21:42:24