문제

에서 여행을 학습된 이 내가 설정한 몇 가지 기본적인 이해의 WPF 및 뷰 모델 패턴이다.나는 다음을 사용하여 추상화 제공하는 경우 목록 및 암에 관심이 있는 단일 선택 항목입니다.

public ObservableCollection<OrderViewModel> Orders { get; private set; }
public ICollectionView OrdersView
{
    get
    {
        if( _ordersView == null )
            _ordersView = CollectionViewSource.GetDefaultView( Orders );
        return _ordersView;
    }
}
private ICollectionView _ordersView;

public OrderViewModel CurrentOrder 
{ 
    get { return OrdersView.CurrentItem as OrderViewModel; } 
    set { OrdersView.MoveCurrentTo( value ); } 
}

내가 다음에 바인딩 OrdersView 지원과 함께 정렬하고 필터링 목록에서 WPF:

<ListView ItemsSource="{Binding Path=OrdersView}" 
          IsSynchronizedWithCurrentItem="True">

이 작품에 대한 단일 선택을 전망이다.그러나 나는 같은 지원하기 위해 여러 항목을 선택에서 보기고 있는 모델에 묶은 목록의 선택 항목입니다.

어떻게 바인딩 ListView.Selecteditems 는하여 후원자산에서 뷰 모델?

도움이 되었습니까?

해결책

추가 IsSelected 제공하는 아이가 시점(OrderViewModel 에서 당신의 경우):

public bool IsSelected { get; set; }

바인딩을 선택한 숙박 시설에는 컨테이너를 이(에 대한 목록 상자에 이 경우):

<ListBox.ItemContainerStyle>
    <Style TargetType="{x:Type ListBoxItem}">
        <Setter Property="IsSelected" Value="{Binding Mode=TwoWay, Path=IsSelected}"/>
    </Style>
</ListBox.ItemContainerStyle>

IsSelected 입 업데이트와 일치하는 해당 분야에서 컨테이너입니다.

당신이 얻을 수 있는 선택한 아이들 보기에는 모델을 수행하여 다음과 같다:

public IEnumerable<OrderViewModel> SelectedOrders
{
    get { return Orders.Where(o => o.IsSelected); }
}

다른 팁

나는 당신을 확신 할 수 있습니다: SelectedItems 실제로 바인딩 가능 XAML CommandParameter

거기에 간단한 솔루션이 일반적인 문제점;을 작동하게 따라야 합니다 모든 다음 규칙:

  1. 다음 Ed 공의 제안, 에 XAML 명령은 데이터 바인딩,정의 CommandParameter 특성 Command 특성이 있습니다. 이 매우 시간이 걸리는 버그.

    enter image description here

  2. 는지 확인 ICommandko CanExecuteExecute 방법의 매개변수 유형 object.이 방법을 방지할 수 있습니다 침묵 cast 발생하는 예외를 때마다 바인딩의 CommandParameter 형식과 일치하지 않 h Command 메서드의 매개변수 유형:

    private bool OnDeleteSelectedItemsCanExecute(object SelectedItems)  
    {
         // Your code goes here
    }
    
    private bool OnDeleteSelectedItemsExecute(object SelectedItems)  
    {
        // Your code goes here
    }
    

할 수 있습니다 예를 들어,중송 ListView/ListBoxko SelectedItems 제공하 h ICommand 방법이나 ListView/ListBox 자체입니다.좋은,그렇지 않나요?

이 방지 누군가에서 보내는 엄청난 양의 시간이 나는 방법을 알아낼 수신 SelectedItemsCanExecute 매개 변수입니다.

하나 시도 할 수 있습을 만드는 연결을 제공합니다.

이렇게 하면 저장 중에서 추가 IsSelected 속성에 대한 각각의 목록은 당신할 수 있습니다.나는 그것을 대 ListBox, 지만,그것을 수정할 수 있습니다 사용에 목록을 볼 수 있습니다.

<ListBox SelectionMode="Multiple"
         local:ListBoxMultipleSelection.SelectedItems="{Binding SelectedItems}" >

더 많은 정보: WPF–바인딩 ListBox selecteditems 는 연결 속 VS 스타일 .

만약 당신이 사용하여된 이 빛이 패턴을 사용할 수 있습니다:

https://galasoft.ch/posts/2010/05/handling-datagrid-selecteditems-in-an-mvvm-friendly-manner

특히 우아한처럼 보이지만 그것이 있어야에서 신뢰할 수 있는 적어도

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top