我有一個ItemsContol綁定到一個國家模型 - 看起來像這樣。MVVMLight多個列表框選擇
國家
--int標識
--string名稱
- 標示縣
ItemsControl中的DataTemplate中有一個列表框 - 這是綁定到縣財產。
所以我想要的是任何時候只有一個列表框中的一個項目被選中。
例如: 我有一個項目在第一個列表框中選擇,我點擊第二個列表框中的一個項目,那麼第一個列表框不應該有任何選定的項目。
任何想法??
我有一個ItemsContol綁定到一個國家模型 - 看起來像這樣。MVVMLight多個列表框選擇
國家
--int標識
--string名稱
- 標示縣
ItemsControl中的DataTemplate中有一個列表框 - 這是綁定到縣財產。
所以我想要的是任何時候只有一個列表框中的一個項目被選中。
例如: 我有一個項目在第一個列表框中選擇,我點擊第二個列表框中的一個項目,那麼第一個列表框不應該有任何選定的項目。
任何想法??
將SelectedCounty屬性添加到您的Country對象。然後,您可以將ListBox
上的SelectedItem
綁定到該屬性。然後在代碼中手動將所有其他設置爲空。這裏的東西,像這樣
Country.OnPropertyChanged += (s,e) =>
{
if(e.PropertyName == "SelectedCounty")
{
foreach(Country country in MyCountries)
if(country != sender)
country.SelectedCounty = null;
}
}
僅作參考是我使用的解決方案 - 它位於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;
});
}
希望它可以幫助別人:)
我正要刪除這個帖子因爲我把它整理出來了。你用過的那個例子可以工作,但它不是很優雅的IMO。我創建了一個CountryViewModel,並在那裏有一個SelectedCounty,當它改變時,我廣播一條消息,並且在每個CountryViewModels中我都有一個註冊通知 - 如果它不在同一個ViewModel中,那麼我將它設置爲null - easy peasy ....我希望:)感謝您抽出時間回覆 - 謝謝。 – Eoinii 2010-07-28 16:22:46
@IrishJoker:那真棒。你也可以做出答案。 – Amsakanna 2010-07-28 18:30:40
@IrishJoker:如果我理解正確,那麼您將SelectedCountry設置爲null。如果是這樣,它會再次播放一條消息。所以在廣播更改通知之前,請檢查它是否爲空。 – Amsakanna 2010-07-28 18:43:25