多选ListView

时间:2015-01-20 15:31:31

标签: c# wpf listview mvvm

我有两个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); } }

这可能不是解决问题的最佳方法,但我还在学习。 我如何以及何时重置所选城市?这甚至可能吗?

1 个答案:

答案 0 :(得分:0)

我设法找到了解决方案。它适用于我的情况,有时最明显的答案是我们最后想到的。

public IEnumerable<City> SelectedCities{ get { return CityList.Where(x => x.IsSelected && x.Country == SelectedCountry); } }

这并不妨碍同时为不同国家选择多个城市,但会抑制不属于所选国家的城市。