У меня есть класс MyClient
с IObservable<IStatus>
(Client.StatusStream()
).Теперь я хотел бы объединить ReactiveX
и ReactiveUI
.Но документация не дает никакого примера, как использовать их вместе.
Я пробовал некоторые методы расширения (например, .ToProperty
), но они не работают.
public partial class MainWindow : ReactiveWindow<AppViewModel>
{
public MainWindow()
{
InitializeComponent();
ViewModel = App.Container.GetInstance<AppViewModel>();
this.WhenActivated(r =>
{
this.OneWayBind(ViewModel, viewModel => viewModel.Status.AoiStatus, view => view.StatusTxtbl.Text).DisposeWith(r);
this.OneWayBind(ViewModel, viewModel => viewModel.Status.OperationMode, view => view.OpModeTxtbl.Text).DisposeWith(r);
this.OneWayBind(ViewModel, viewModel => viewModel.Status.TestPlan, view => view.TestplanTxtbl.Text).DisposeWith(r);
});
}
private async void ButtonGetStatus_OnClick(object sender, RoutedEventArgs e)
{
// the manual mode to get the actual status information
var status = await ViewModel.Client.GetStatusAsync();
ViewModel.Status = status;
}
}
public class AppViewModel : ReactiveObject
{
private IStatus _Status;
public IStatus Status
{
get => _Status;
set => this.RaiseAndSetIfChanged(ref _Status, value);
}
public MyClient Client { get; }
public AppViewModel(MyClient client)
{
Client = client;
// automatically pushes every new status information
Client.StatusStream(); // <- How to get the data out there?
}
}
Информация
Чтобы уведомить графический интерфейс о новых обновлениях, необходимо использовать ObserveOnDispatcher
, см. https://stackoverflow.com/a/55811495/6229375