以下是我真正想要做的一個簡化示例,但我對它的問題是相同的。WPF:在使用MVVM時更改數據綁定
假設我有兩個對象,男人和女人,他們都有相同的屬性(年齡,身高和體重),但他們是兩個不同的對象。我無法改變這一點。
現在假設我有一個WPF面板,它是使用MVVM原理製作的,它顯示了文本框中某個人的年齡。我爲此使用Text =「{Binding Path = OnePerson.Age}」,其中OnePerson是在視圖模型中定義的Man類型的對象。
這工作正常,但我想要一個類似的頁面來顯示一個女人的這個信息。理想情況下,我想只使用與以前相同的視圖和視圖模型。但這很棘手,因爲數據綁定指向了Man-object OnePerson。我可以以編程方式更改數據綁定(如WPF Binding Programatically中所述),但我只能從視圖的代碼隱藏中這樣做。我不能這麼做,因爲我們使用的是MVVM模型。
我想使OnePerson是指男人或女人的對象,但我不知道這樣做的好方法。他們是不同的類型,所以我不能只使用if語句來指定男人或女人。我可以將OnePerson聲明爲對象而不是類型,但是我無法輕鬆地訪問Age,Height和Weight屬性。或者我可以製作一個完全不同的ViewModel,其中一個將OnePerson聲明爲男人,另一個聲稱爲女人,並對他們使用相同的視圖。我認爲這應該可行,但對於單個視圖有兩個視圖模型似乎有點奇怪。在我開始添加新功能(如添加新的男人/女人或編輯現有的功能)時,添加我自己的Person類並在它與「男人或女人」之間進行轉換可能會使整個視圖模型變得相當複雜,直到我可能以及複製粘貼人視圖和視圖模型並僅將OnePerson對象更改爲女人。
我的問題是,是否有使用單一視圖和視圖模型顯示無論是男人還是在這種情況下,一個女人的信息的乾淨和簡單的方式。或者我應該不打擾併爲這些情況製作單獨的頁面?
希望這已經夠清楚了。
謝謝你的解釋廣泛年齡屬性只是工作。我自己考慮過DataTriggers,但看起來像是一旦遇到更復雜的面板,它會很快變得麻煩。但Datatemplate示例看起來不錯。我明天會試一試。 – user2527902