我在WPF控件中有一些图像(位置)。每个图像都与该控件下方ListView
中的项目相关。当用户单击某个位置时,我希望在ListViewItem
中选择相应的ListView
(并因此使其突出显示)。同样,当用户单击ListViewItem
时,我希望选择相应的位置。
我可以完成一种行为或另一种行为,但似乎无法使两者共同努力。
我有一个Style
当选择一个位置,设置IsSelected
属性为'真”:
<Style x:Key="PositionItem" TargetType="ListViewItem">
<Setter Property="IsSelected" Value="False" />
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource IsCurrentPositionConverter}">
<Binding RelativeSource="{RelativeSource Self}" Path="DataContext" />
<Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UserControl}}" Path="DataContext.CurrentBackplane.CurrentCard.CurrentPosition" />
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="IsSelected" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
在我的
ListView
中,我为SelectionChanged
设置了一个处理程序:private void Positions_SelectionChanged(object sender, SelectionChangedEventArgs e) {
var listView = sender as ListView;
if (listView == null) return;
var currentPos = listView.SelectedItem as IGraphicPositionViewModel;
if (currentPos == null) return;
if (currentPos != _ViewModel.CurrentBackplane.CurrentCard.CurrentPosition)
_ViewModel.CurrentBackplane.CurrentCard.CurrentPosition = currentPos;
}
问题是,即
IsSelected
的ListViewItem
属性似乎与SelectedItem
的ListView
属性没有很好的关联。我可以使用其他一些属性或事件来同步这些属性吗?
最佳答案
您需要使用SelectedPosition
和SelectedListItem
属性定义 View 模型。然后,在这些属性之一的事件处理程序中,您应该更改另一个属性:
private Position _selectedPosition;
public Position SelectedPosition
{
get
{
return _selectedPosition;
}
set
{
if (_selectedPosition != value)
{
_selectedPosition = value;
RaisePropertyChanged("SelectedPosition");
_OnSelectedPositionChanged();
}
}
}
private void _OnSelectedPositionChanged()
{
_selectedListItem = ... ; // find corresponding item in the list
RaisePropertyChanged("SelectedListItem"); // update selection of the ListView
}
并且在
SelectedListItem
事件处理程序中应该使用类似的代码。关于.net - 在ListView中同步IsSelected和SelectedItem,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11146049/