2015-09-07 90 views
1

我已將ReactiveList訂單綁定到wpf中的數據網格。 我成功地獲得了一個選擇的順序由以下語法使用ReactiveUI獲取從ReactiveList中選擇的項目集合

private Order _selectedOrder; 
public Order SelectedOrder 
{ 
    get { return _selectedOrder; } 
    set { this.RaiseAndSetIfChanged(ref _selectedOrder, value); } 
} 
this.WhenAnyValue(x => x.Orders.ItemChanged).Select(x => _selectedOrder = ((Order)x)); 

但是,如果我多DataGrid中選擇命令我怎麼選定的項目?

回答

1

由格魯克給出的提示,我發現了一種通過在視圖中添加選擇改變事件處理程序的DataGrid獲得所選訂單收集如下

在視圖模型中添加活性財產

private IList<Order> selectedOrders; 
public IList<Order> SelectedOrders 
{ 
    get 
    { 
     return selectedOrders; 
    } 
    set { this.RaiseAndSetIfChanged(ref selectedOrders, value); } 
} 

,並在視圖的代碼隱藏

private void OrdersGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    ViewModel.SelectedOrders = OrdersGrid.SelectedItems.Cast<Order>().ToList(); 
} 
+1

但是想知道爲什麼ReactiveUI.Events.dll作爲與ReactiveUI分開的程序集發佈。當開發人員發現這個似乎有用的獨立dll時,需要再次請求第三方軟件批准小組獲得贈款! – viento

2

你的代碼看起來並沒有執行你想要的,因爲你似乎正在監聽ReactiveList ItemChanged observable(當你的數據源發生變化時會觸發),當你想要看的是網格選擇。

雖然沒有測試過,下面的代碼似乎更符合你想達到的(使用reactiveui事件傭工)什麼:

// in the VM 
public IList<Order> SelectedOrders { /* regular RxUI property as usual */ } 

// in the view 
this.Grid.Events().SelectionChanged 
    .Select(_ => this.Grid.SelectedItems.Cast<Order>().ToList()) 
    .Subscribe(list => ViewModel.SelectedOrders = list); 

難道我抓你想達到什麼樣的?

+0

你的方法似乎解決問題。但我需要將reactiveUI.events dll添加到proj引用。即使在添加了reactiveui.events.dll之後,我也沒有在DataGrid的事件集合中發現SelectionChanged事件 – viento

相關問題