2014-01-07 111 views
0

我覺得我錯過了一些東西,但我不知道我的代碼可能有什麼問題。OnPropertyChange不更新組合框

我確實有一個帶有ListView和ComboBox的WPF MVVM應用程序。 列表框顯示包含兩個對象的對象,讓我們說我有一個列表框:

Intel <> CPU 
Intel <> GPU 
AMD <> CPU 

和ComboBox有:

Intel 
AMD 

我想什麼來實現: 當我點擊Intel <> CPUIntel <> GPU我希望ComboBox設置爲Intel

我的代碼:

<ListBox ItemsSource="{Binding Parts}" SelectedItem="{Binding Path=SelectedPart, Mode=TwoWay}" /> 
<ComboBox ItemsSource="{Binding Producers}" SelectedItem="{Binding Path=SelectedProducer, Mode=TwoWay}"/> 

目前,當我點擊它不火OnPropertyChanged列表框項,並輸入我的方法

private Parts _selectedPart; 
public Parts SelectedPart 
{ 
    get{return _selectedPart;} 
    set{ 
     _selectedPart= value; 
     SelectedProducer = _selectedPart.Producer; 
     OnPropertyChanged("SelectedRealisation"); 
    } 
} 

private Producers _selectedProducer; 
public Producers SelectedProducer 
{ 
    get{return _selectedProducer; } 
    set 
    { _selectedProducer= value; 

     OnPropertyChanged("SelectedProducers"); 
    } 
} 

它設置正確(檢查與調試器)的SelectedProducer它觸發OnPropertyChanged("SelectedProducers")但它不會將ComboBox可見選定值更新爲ListBox中當前選定的值。

+1

'Parts'中的製作者與'Producers'中的對象是否相同?你將一些錯誤的參數傳遞給'OnPropertyChanged'。對於'SelectedProducer',參數字符串中有一個附加的s。此外,考慮將組合框綁定到「SelectedPart.Producer」。這可能更容易處理,也更直觀。 –

+0

這是一個錯誤,因爲在實際情況下我沒有零件和製造商,但我想更清楚地解釋它。 – SirKometa

回答

3

SirKometa,

從您的視圖模型看來你是不觸發正確的OnPropertyChanged名嘗試改變名稱的OnPropertyChanged()方法將物業的實際名稱(除非有更多的型號失蹤)。

private Parts _selectedPart; 
public Parts SelectedPart 
{ 
    get{return _selectedPart;} 
    set{ 
     _selectedPart= value; 
     SelectedProducer = _selectedPart.Producer; 
     OnPropertyChanged("SelectedPart"); 
    } 
} 

private Producers _selectedProducer; 
public Producers SelectedProducer 
{ 
    get{return _selectedProducer; } 
    set 
    { _selectedProducer= value; 

     OnPropertyChanged("SelectedProducer"); 
    } 
} 

OnPropertyChanged應引用已更改的屬性的名稱。看起來你的名字不正確。

0

原來,我真的dind't深挖不夠,因爲我的煩惱,答案已經在計算器上...我發現在這裏: WPF - MVVM - ComboBox SelectedItem

Producers一直以來始終檢索數據從數據庫中和這就是ComboBox無法更新的原因。