2012-08-02 102 views
2

任何人都可以幫忙,失去了很多時間試圖解決這個問題。WPF ListBox SelectedItem問題

我有一個視圖模型具有以下屬性

public ObservableCollection<ListItem> OpcoList { get; set; } 
    public ListItem SelectedOpco { 
     get { 
      return _selectedOpco; 
     } 
     set { 
      if (_selectedOpco != null && _selectedOpco.Equals(value)) { 
       return; 
      } 
      var oldValue = _selectedOpco; 
      _selectedOpco = value; 

      RaisePropertyChanged("SelectedOpco"); 
    } 

在我的XAML我有

<ListBox Name="listOpco" ItemsSource="{Binding OpcoList}" 
    SelectionMode="Single" SelectedItem="{Binding Mode=TwoWay, Path=SelectedOpco}"> 

但每當我在我的虛擬機設置一定的參考價值SelectedOpco在列表框中選擇它不顯示。

任何想法?提前致謝!

+0

您是否設置了一個斷點或類似點來確認您是否已經完成了設定? – 2012-08-02 10:58:38

+0

是的,我做了,奇怪的部分是列表框上的選擇反映在虛擬機上,但虛擬機上的更改沒有反映在列表框中 – Miran 2012-08-02 11:02:53

+0

這表明您的'PropertyChanged'事件未正確觸發。你可以發佈'RaisePropertyChanged'調用的實現嗎? – 2012-08-02 11:07:04

回答

0

有些事情你可以嘗試:

  1. 簡化二傳手以更簡單的東西(它應該做你希望的 - 如果選擇列表中的不同元素檢查)。

    set { 
        if(_selectedOpco != value) { 
         _selectedOpco = value; 
         RaisePropertyChanged("SelectedOpco"); 
        } 
    } 
    
  2. 把一個破發點在RaisePropertyChanged("SelectedOpco");線,看是否執行去那裏。如果是,請檢查課程是否真的標記爲INotifyPropertyChanged

    if(!(this is INotifyPropertyChanged)) 
        throw new Exception("Not INotifyPropertyChanged"); 
    
  3. 嘗試與設定值:

    SelectedOpco = OpcoList.FirstOrDefault(); // LastOrDefault 
    

祝你好運!