gpt4 book ai didi

c# - 使用 ReactiveUI 从 ReactiveList 获取所选项目集合

转载 作者:太空宇宙 更新时间:2023-11-03 21:18:32 26 4
gpt4 key购买 nike

我已经将 ReactiveList Orders 绑定(bind)到 wpf 中的数据网格。我通过以下语法成功获得了单个选定订单

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 中多选订单,我如何获得选中的项目?

最佳答案

首先,您需要将 EventPattern 转换为 IObservable。你可以使用这样的东西来做到这一点:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reactive.Linq;
using System.Windows.Controls;

namespace System.Windows.Controls.Extensions
{
public static class ListBoxExtensions
{
public static IObservable<List<T>> SelectionChanged<T>(this ListBox listBox)
{
return Observable.FromEventPattern<SelectionChangedEventHandler, SelectionChangedEventArgs>(
eh => listBox.SelectionChanged += eh,
eh => listBox.SelectionChanged -= eh)
.Select(_ => listBox.SelectedItems.Cast<T>().ToList());
}
}
}

然后在您的 Control 中,将结果绑定(bind)到 ViewModel,如下所示:

    public partial class MyControl : UserControl, IViewFor<MyViewModel>
{
public MyControl()
{
InitializeComponent();

this.WhenActivated(d =>
{
MyListView.SelectionChanged<MyItemViewModel>()
.Do(list => ViewModel.SelectedItems = list)
.SubscribeOn(RxApp.MainThreadScheduler)
.ObserveOn(RxApp.MainThreadScheduler)
.Subscribe()
.DisposeWith(d);
});
}

object IViewFor.ViewModel
{
get => ViewModel;
set => ViewModel = value as MyViewModel;
}

public MyViewModel ViewModel
{
get => DataContext as MyViewModel;
set => DataContext = value;
}
}

关于c# - 使用 ReactiveUI 从 ReactiveList 获取所选项目集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32440637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com