我有一个使用CommunityToolkit.WinUI.UI.Controls.DataGrid
的Winui3项目.
我把ObservableCollection<ExampleClass>
和DataGrid
Bundle 在一起.
ExampleClass的相关变量为:Amount int, Price int, TotalPrice int
.
我向我的数据网格CellEditEnded
添加了一个事件,它将TotalPrice
更新为Amount * Price
.
在用户在运行时更改数据网格中的Amount
或Price
之后,但是对于值TotalPrice
的任何类型的更改,以下问题仍然存在.
在应用程序开始时,价格为==10.当用户将数量更改为2时,该ExampleClass实例的TotalPrice单元格仍然显示0(0数量*10价格).我已判断过,并且已在Observablecolect中正确更改了TotalPrice值.问题是DataGrid不会显示更改.当我重新加载页面时,更改终于正确完成.或者,当用户开始编辑TotalPrice单元格时,正确的值突然出现并停留在单元格中.有趣的是,当我try 手动更改总价格值时,它总是返回到正确的值.
在这个问题上,用户在编辑金额或价格后,总是必须开始编辑所有过时的总价格单元格才能看到正确的值.或者他重新加载页面以查看所有正确的值.
当单元格A(Amount或Price)更改时,DataGrid似乎不会更新单元格B(TotalPrice).
金额=数字,价格=价格
<controls:DataGrid
AutoGenerateColumns="False"
GridLinesVisibility="Horizontal"
ItemsSource="{x:Bind ViewModel.kgr.Tabelle1, Mode=OneWay}"
Grid.Column="0"
Grid.Row="0"
CellEditEnded="DataGrid_CellEditEnded>
<controls:DataGrid.Resources>
<SolidColorBrush x:Key="DataGridColumnHeaderBackgroundColor" Color="Transparent" />
</controls:DataGrid.Resources>
<controls:DataGrid.Columns>
<controls:DataGridTextColumn Binding="{Binding Name}" Header="Bereich" />
<controls:DataGridTextColumn Binding="{Binding Anzahl}" Header="Fläche in m^2" />
<controls:DataGridTextColumn Binding="{Binding Preis}" Header="€ pro m^2" />
<controls:DataGridTextColumn Binding="{Binding TotalPreis}" Header="Gesamt"/>
<!-- IsReadOnly="True" -->
</controls:DataGrid.Columns>
</controls:DataGrid>
我将重点放在XAML文件上,因为数据源工作得很好.
在那里,我try 了celleditEvent的替代方法、itemsource中的绑定模式、itemsource中的其他XAML属性、datagrid本身、totalPrice列、totalPrice绑定属性等.
这些属性中的许多都有很有前途的名称(比如UpdateSourceTrigger
,Bindmode=Twoway),但我try 了很多方法,似乎都不起作用.
我可能遗漏了一些东西,但平庸的文档和年轻的winui3并没有帮助,
我无法想象在微软的用户界面框架中不存在这个功能.
WPF开发人员使用属性已更改,我查找了具有该名称的内容,发现它是DatagridextColumn中的绑定属性或itemsource中的属性,但文档是这https://learn.microsoft.com/en-us/dotnet/api/communitytoolkit.winui.ui.controls.datagridboundcolumn.binding?view=win-comm-toolkit-dotnet-7.0#communitytoolkit-winui-ui-controls-datagridboundcolumn-binding
即使是一个临时的不优雅的修复也可以,比如重新加载数据网格,我只是需要一些东西.
希望能得到一些帮助.