2010-07-28 55 views
1

我有一個ItemsContol綁定到一個國家模型 - 看起來像這樣。MVVMLight多個列表框選擇


國家
--int標識
--string名稱
- 標示縣


ItemsControl中的DataTemplate中有一個列表框 - 這是綁定到縣財產。

所以我想要的是任何時候只有一個列表框中的一個項目被選中。

例如: 我有一個項目在第一個列表框中選擇,我點擊第二個列表框中的一個項目,那麼第一個列表框不應該有任何選定的項目。

任何想法??

回答

0

將SelectedCounty屬性添加到您的Country對象。然後,您可以將ListBox上的SelectedItem綁定到該屬性。然後在代碼中手動將所有其他設置爲空。這裏的東西,像這樣

Country.OnPropertyChanged += (s,e) => 
    { 
     if(e.PropertyName == "SelectedCounty") 
     { 
      foreach(Country country in MyCountries) 
       if(country != sender) 
        country.SelectedCounty = null; 
     } 
    } 
+2

我正要刪除這個帖子因爲我把它整理出來了。你用過的那個例子可以工作,但它不是很優雅的IMO。我創建了一個CountryViewModel,並在那裏有一個SelectedCounty,當它改變時,我廣播一條消息,並且在每個CountryViewModels中我都有一個註冊通知 - 如果它不在同一個ViewModel中,那麼我將它設置爲null - easy peasy ....我希望:)感謝您抽出時間回覆 - 謝謝。 – Eoinii 2010-07-28 16:22:46

+0

@IrishJoker:那真棒。你也可以做出答案。 – Amsakanna 2010-07-28 18:30:40

+0

@IrishJoker:如果我理解正確,那麼您將SelectedCountry設置爲null。如果是這樣,它會再次播放一條消息。所以在廣播更改通知之前,請檢查它是否爲空。 – Amsakanna 2010-07-28 18:43:25

0

僅作參考是我使用的解決方案 - 它位於CountryViewModel

private CountyModel _selectedcounty; 
    public CountyModel SelectedCounty 
    { 
     get { return _selectedcounty; } 
     set 
     { 
      _selectedcounty = value; 
      RaisePropertyChanged("SelectedCounty"); 

      if (value != null) 
      { 
       if (CountySelectedEvent != null) 
        CountySelectedEvent(value, EventArgs.Empty); 

       Messenger.Default.Send<CountyModel>(value, "SelectedCounty"); 
      } 
     } 
    } 

    public CountryViewModel() 
    { 
     Counties = new ObservableCollection<CountyModel>(); 

     Messenger.Default.Register<CountyModel>(this, "SelectedCounty", 
      msg => 
      { 
       if(msg != this.SelectedCounty && msg != null) 
        this.SelectedCounty = null; 
      }); 
    } 

希望它可以幫助別人:)