我有两个ListView控件。在左侧,我显示国家列表,右侧显示相应的城市列表 现在出现问题:我想用一个选定城市列表填充第三个ListView。我已经想出了一种不多次添加城市的方法,但我仍然有为不再选择的国家添加所选城市的问题。 例如:
当我按"添加"我只想添加当前所选国家/地区的城市,在这种情况下,柏林&慕尼黑。
到目前为止部分视图:
<ListView ItemsSource="{Binding CountryList, Mode=TwoWay}"
SelectionMode="Single"
SelectedItem="{Binding SelectedCountry, Mode=TwoWay}">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<...>
<ListView ItemsSource="{Binding CityList, Mode=TwoWay}"
SelectionMode="Extended">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="IsSelected" Value="{Binding isSelected}"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<ListView ItemsSource="{Binding AddedCities}">
<ListView.ItemTemplate>
<...>
</ListView.ItemTemplate>
</ListView>
我的ViewModel实现了以下(和更多)属性:
public Country SelectedCountry
{
get { return GetValue(() => SelectedCountry); }
set
{
SetValue(() => SelectedCountry, value);
var query = from c in CityList
where c.Country == SelectedCountry
select c;
CitiesInCountry= new ObservableCollection<City>(query);
}
}
public IEnumerable<City> SelectedCities { get { return CityList.Where(x => x.IsSelected); } }
这可能不是解决问题的最佳方法,但我还在学习。 我如何以及何时重置所选城市?这甚至可能吗?
答案 0 :(得分:0)
我设法找到了解决方案。它适用于我的情况,有时最明显的答案是我们最后想到的。
public IEnumerable<City> SelectedCities{ get { return CityList.Where(x => x.IsSelected && x.Country == SelectedCountry); } }
这并不妨碍同时为不同国家选择多个城市,但会抑制不属于所选国家的城市。