2012-06-21 4 views
1

WPF 컨트롤에 이미지 (위치)가 있습니다. 각 이미지는 해당 컨트롤 아래의 ListView에있는 항목과 관련이 있습니다. 사용자가 위치를 클릭하면 ListView에서 해당하는 을 선택하여 강조 표시합니다. 마찬가지로 사용자가 ListViewItem을 클릭하면 해당 위치가 선택되기를 원합니다.ListView에서 IsSelected와 SelectedItem 동기화하기

나는 하나의 행동이나 다른 행동을 성취 할 수 있지만, 나는 함께 일하는 것 같지 않습니다. 위치가 선택 될 때

내가 '`true로 IsSelected 속성을 설정하는 Style 있습니다

<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의 속성

이러한 속성을 동기화하는 데 사용할 수있는 다른 속성이나 이벤트가 있습니까?

답변

0

속성이 SelectedPositionSelectedListItem 인 뷰 모델을 정의해야합니다.

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 이벤트 처리기에서 사용되어야한다 : 그리고, 이러한 속성 중 하나의 이벤트 핸들러에서 다른 속성을 변경해야합니다.