문제
에서 여행을 학습된 이 내가 설정한 몇 가지 기본적인 이해의 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
거기에 간단한 솔루션이 일반적인 문제점;을 작동하게 따라야 합니다 모든 다음 규칙:
다음 Ed 공의 제안, 에 XAML 명령은 데이터 바인딩,정의
CommandParameter
특성 기 이Command
특성이 있습니다. 이 매우 시간이 걸리는 버그.는지 확인
ICommand
koCanExecute
고Execute
방법의 매개변수 유형object
.이 방법을 방지할 수 있습니다 침묵 cast 발생하는 예외를 때마다 바인딩의CommandParameter
형식과 일치하지 않 hCommand
메서드의 매개변수 유형:private bool OnDeleteSelectedItemsCanExecute(object SelectedItems) { // Your code goes here } private bool OnDeleteSelectedItemsExecute(object SelectedItems) { // Your code goes here }
할 수 있습니다 예를 들어,중송 ListView
/ListBox
ko SelectedItems
제공하 h ICommand
방법이나 ListView
/ListBox
자체입니다.좋은,그렇지 않나요?
이 방지 누군가에서 보내는 엄청난 양의 시간이 나는 방법을 알아낼 수신 SelectedItems
로 CanExecute
매개 변수입니다.
하나 시도 할 수 있습을 만드는 연결을 제공합니다.
이렇게 하면 저장 중에서 추가 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
특히 우아한처럼 보이지만 그것이 있어야에서 신뢰할 수 있는 적어도