比方說,我有四個組合框(我們稱之爲的cbA1,CBA2,CBB1,cbB2),cbA1和CBB1被綁定到相同的屬性和CBA2和cbB2到在我的viewmodel不同的屬性。在我切換到MVVM之前,我有一些代碼隱藏,確保在cbA1和cbB1中相同的值不相同。他們使用枚舉作爲itemssource。數據綁定單一源向多個ComboBox'es沒有更新所有的人
您必須忽略爲什麼我有這麼多組合框顯示數據的原因,因爲它現在是。我只是無意中偶然發現了這個。
這是它們是如何在XAML構造:
<ComboBox
x:Name"cbA1"
DisplayMemberPath="Description"
SelectedValuePath="Value"
SelectedValue="{Binding Window1Page}"
ItemsSource="{Binding Source={local:Enumeration {x:Type Enum:eDisplayPages}}}"/>
<ComboBox
x:Name"cbA2"
DisplayMemberPath="Description"
SelectedValuePath="Value"
SelectedValue="{Binding Window2Page}"
ItemsSource="{Binding Source={local:Enumeration {x:Type Enum:eDisplayPages}}}"/>
因此,當我運行應用程序#1組合框顯示從Window1Page數據和#2組合框顯示從Window2Page的數據。我檢查了舊的代碼隱藏,以確保#1組合框中的內容不能位於#2組合框中。這工作得很好。現在我正在轉向MVVM模型,我已經將代碼移入屬性本身。下面是其中一個屬性:
public eDisplayPages Window1Page
{
get { return _window1page; }
set
{
if (_window1page == value)
return;
if ((value.Equals(_window2page)) && (value != eDisplayPages.NoDashPage))
{
//Can't have them both selecting the same page
value = eDisplayPages.NoDashPage;
}
SetProperty(ref _window1page, value);
}
}
儘管這裏沒有真正相關的是枚舉,以幫助您可視化的問題:
public enum eDisplayPages
{
[Description("NO Layout")]
NoDashPage = 0,
[Description("Main Layout")]
MainDashPage,
[Description("Timing Layout")]
TimingOnlyDashPage
}
所以我看到的問題是,當我改變可以說, cbA1的值與cbA2的值相同,屬性代碼將運行並將值更改爲默認的「NoDashPage」,但它只會更新我沒有進行更改的組合框,在本例中爲cbB1。
用於更改組合框的舊代碼隱藏方法我專注於以及其他組合框。唯一的區別是我曾經將焦點組合框的SelectedValue設置爲新的值,它更新了其他組合框。
我不明白爲什麼它不改變我做了初始選擇的組合框。如果我進入調試器,Window1Page的值是正確的。
雖然我最終會刪除重複的組合框,但我關注的並不是更新是最大的問題。