只有一个选定项的多个列表视图
本文关键字:列表 视图 有一个 | 更新日期: 2024-10-31 03:50:39
我有多个列表视图,每个列表视图都与自己的itemsource绑定。但我只有 1 个选定项目。
因此,例如,我有 5 个列表框(Monday, Tuesday, ...)
每个列表框都有自己的项目源(MondayList, TuesdayList, ...)
。这些列表视图选定项属性中的每一个都绑定到属性'CurrentToDo
'。
问题是,如果我在星期一选择一个,然后在星期二选择一个,它们都被选中了。
因此,在所有列表视图中只能选择一个项目,请帮助。
<UserControl.Resources>
<Style x:Key="ListViewItemStyleToDo" TargetType="{x:Type ListViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
</Style>
<GridView x:Key="ViewBase1" x:Shared="False" >
<GridViewColumn Header="" Width="30">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Subject" Width="auto" DisplayMemberBinding="{Binding Subject}" />
</GridView>
</UserControl.Resources>
<ListView Grid.Row="1" ItemsSource="{Binding MondayList}" SelectedItem="{Binding CurrentToDo, Mode=TwoWay}" SelectionMode="Single" ItemContainerStyle="{DynamicResource ListViewItemStyleToDo}" View="{DynamicResource ViewBase1}" />
<ListView Grid.Row="3" ItemsSource="{Binding TuesdayList}" SelectedItem="{Binding CurrentToDo,Mode=TwoWay}" SelectionMode="Single" ItemContainerStyle="{DynamicResource ListViewItemStyleToDo}" View="{DynamicResource ViewBase1}" />
财产:
private ToDoMod _currentToDo;
public ToDoMod CurrentToDo
{
get { return _currentToDo; }
set
{
_currentToDo= value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("CurrentToDo"));
}
}
这是答案:
只需绑定到 SelectedValue 而不是 SelectedItem。
您需要再添加 5 个属性:MondayCurrentToDo
、TuesdayCurrentToDo
...
将每个列表视图的SelectedItem
绑定到相应的属性。
在每个属性的 setter 中,更新CurrentToDo
并删除其他列表的选择 - 因此它看起来像这样:
private ToDoMod _mondayCurrentToDo;
public ToDoMod MondayCurrentToDo
{
get { return _mondayCurrentToDo; }
set
{
_mondayCurrentToDo= value;
CurrentToDo = _mondayCurrentToDo;
_tuesdayCurrentToDo = null;
//TODO: add null setters for all other _<dayOfWeek>CurrentToDo members
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("MondayCurrentToDo"));
PropertyChanged(this, new PropertyChangedEventArgs("TuesdayCurrentToDo"));
//TODO: add notificaitons for all other <DayOfWeek>CurrentToDo properties
}
}
}
当然,将其重构为方法等...