Привязка к DataGridColumn с использованием привязок на основе ReactiveUI C # - PullRequest
1 голос
/ 09 мая 2019

Я учусь использовать ReactiveUI в WPF. У меня есть приложение с IObservableCollection, которое я связываю с DataGrid.

    <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? Это вроде странно иметь 2 места, где может происходить связывание.

1 Ответ

0 голосов
/ 10 мая 2019

Решение с помощью DataTemplates состоит в том, чтобы не устанавливать его, и привязка rxui автоматически предоставит его и выполнит поиск зарегистрированных IViewFor<TViewModel>, зарегистрированных для модели представления, и покажет это представление.

Множественное связывание, вы можете использовать Observable.CombineLatest с несколькими WhenAny операторами, а затем использовать BindTo.

С помощью сетки данных вы можете программно генерировать столбцы, а затем использовать привязку rxui к ним.В прошлом я использовал шаблон строителя для этого.Готовая DataGrid не так легко совмещать с привязкой rxui.

...