XAML 使用模板列和单元格/数据模板时未绑定WinUI 3 Datagrid复选框

b4lqfgs4  于 2023-03-06  发布在  其他
关注(0)|答案(1)|浏览(138)

WinAppSDK datagrid复选框有一个bug,或者至少是一个设计问题。它需要多次点击才能选中,而且感觉很不稳定。作为一种用户体验,这是不可接受的,所以我被要求找到一个解决方案,我在这里找到了:https://social.msdn.microsoft.com/Forums/en-US/4b96bee6-dc19-4622-9de7-93ad0dbb6df1/want-to-reduce-number-of-clicks-require-to-check-microsoftwindowsdatagridcheckboxcolumn?forum=wpf
问题是,复选框看起来根本没有绑定。下面的数据网格有两列,第一列使用复选框解决方案,允许可接受的UI体验,第二列使用标准复选框列。第一列没有正确绑定(该行的ViewModel.TestSource.Selected没有更改),而第二列绑定正确。
我在装订第一列时遗漏了什么?
注意--该示例没有在列中设置UpdateSourceTrigger,但这似乎没有任何作用,因为它是为datagrid设置的。

<controls:DataGrid
    x:Name="TestDatagrud"
    Margin="12"
    GridLinesVisibility="All"
    HorizontalGridLinesBrush="PowderBlue"
    VerticalGridLinesBrush="PowderBlue"
    BorderBrush="PowderBlue"
    ScrollViewer.HorizontalScrollBarVisibility="Auto"
    AutoGenerateColumns="False"
    ItemsSource="{x:Bind ViewModel.TestSource, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
    <controls:DataGrid.Columns>
        <controls:DataGridTemplateColumn Header="Test 01">
            <controls:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <CheckBox
                        HorizontalAlignment="Center"
                        IsChecked="{Binding Selected}"/>
                </DataTemplate>
            </controls:DataGridTemplateColumn.CellTemplate>
        </controls:DataGridTemplateColumn>
        <controls:DataGridCheckBoxColumn
            IsReadOnly="False"
            Header="Test 02"
            Width="75"
            Binding="{Binding Selected}" />
    </controls:DataGrid.Columns>
</controls:DataGrid>
bsxbgnwa

bsxbgnwa1#

如果要将更改应用回源代码(在本例中为ViewModel.TestSource.Selected),则需要使用TwoWay模式。

IsChecked="{Binding Selected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"

我还要提一下,您可以在这里使用x:Bind

<!-- Assuming that the type is Item. -->
<DataTemplate x:DataType="local:Item">
    <CheckBox
        HorizontalAlignment="Center"
        IsChecked="{x:Bind Selected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>

相关问题