首页 > 解决方案 > 使用基于 ReactiveUI C# 的绑定绑定到 DataGridColumn

问题描述

我正在学习在 WPF 中使用 ReactiveUI。我有一个应用程序,它有一个绑定到 DataGrid 的 IObservableCollection。

    <DataGrid Grid.Row="3" Grid.ColumnSpan="2" AutoGenerateColumns="False" ScrollViewer.VerticalScrollBarVisibility="Visible" x:Name="validationResults" HorizontalAlignment="Stretch" IsReadOnly="True" SelectionMode="Extended" SelectionUnit="Cell">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Item Id" x:Name="vrContractID"  Binding="{Binding Path=ItemId, Mode=OneWay}" MinWidth="50" />
            <DataGridTextColumn Header="Item #"  Binding="{Binding Path=ItemNumber, Mode=OneWay}" MinWidth="50"/>
            <DataGridCheckBoxColumn Header="Valid?" Binding="{Binding Path=IsValid, Mode=OneWay}" MinWidth="5"/>
            <DataGridTextColumn Header="Error Code"  Binding="{Binding Path=ErrorCode, Mode=OneWay}" MinWidth="50"/>
            <DataGridTextColumn Header="Error Message"  Binding="{Binding Path=ErrorMessage, Mode=OneWay}" Width="*"/>
        </DataGrid.Columns>
    </DataGrid>

我试图不使用基于 XAML 的绑定,就像我在上面向您展示的那样,但是,我在理解如何使用以下代码在文件后面的代码中完成这种绑定样式时遇到问题:

this.Bind()

或这个:

this.OneWayBind()

我在绑定 DataTemplates 和 MultiBinding 时遇到过类似的问题,这让我想知道 ReactiveUI/MVVM 的设计模式是否缺少一些东西。

任何帮助,将不胜感激。

PS:如果我必须使用 xaml 绑定来绑定它 - 为什么我不能在 xaml 中完成所有绑定?有两个可以发生绑定的地方感觉有点奇怪。

标签: c#wpfdata-bindingreactiveui

解决方案


使用 DataTemplates 的解决方案是不设置一个,rxui 绑定将自动提供一个并查找已IViewFor<TViewModel>注册的视图模型并显示该视图。

您可以Observable.CombineLatest与多个WhenAny运算符一起使用多重绑定,然后使用BindTo.

使用数据网格的故事是您可以以编程方式生成列,然后在这些列上使用 rxui 绑定。在过去,我使用了构建器模式。开箱即用的 DataGrid 与 rxui 绑定并不容易。


推荐阅读