Csh*_*ack 5 data-binding wpf xaml datagrid mvvm
在 WPF 中,我在类中DataGrid绑定了 a 。这是一个触摸面板嵌入式项目,因此每次我在面板上触摸并滑动手指时,它都会不断向我发送值并将这些值保存到并将其分配给边界,使其只能显示 5 或 10 行(预定义)作为数据更新。每次获得新行时,我都会删除最后一行,直到总行数为 5/10。DataViewViewModelDataTableDataViewDataTable
这里的问题是DataGrid绑定到最后一个值需要比平时更长的时间。当我将手离开面板时,我希望网格能够绑定到这些值,但执行此操作需要大约 6 到 10 秒,用户必须等待它完成。
为此,我使用了IsAsync中的属性XAML。正如预期的那样,这使得DataGrid绑定速度更快,但每次更新数据时,都会DataGrid闪烁。我怎样才能克服闪烁的问题DataGrid?或者有没有其他方法可以做到。我们遵循 MVVM 模式进行绑定。
XAML:
<DataGrid
ItemsSource="{Binding Path=View, IsAsync=True, UpdateSourceTrigger=PropertyChanged}"
CanUserSortColumns="False"
CanUserResizeRows="False"
HorizontalScrollBarVisibility="Hidden"
VerticalScrollBarVisibility="Hidden"
EnableColumnVirtualization="True"
EnableRowVirtualization="True"
CanUserAddRows="False">
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
查看型号:
private void InsertCollection(List<string> values)
{
if (values == null || !values.Any()) return;
try
{
var dataRow = ObjectMessageDataTable.NewRow();
int columnCount = ObjectMessageDataTable.Columns.Count;
var inputs = values.Select(y => y as object).ToArray();
for (var i = 0; i < inputs.Count() && i < columnCount; i++)
dataRow[i] = values[i];
ObjectMessageDataTable.Rows.InsertAt(dataRow, 0);
var count = ObjectMessageDataTable.Rows.Count;
while (count > NumOfRows)
{
ObjectMessageDataTable.Rows.RemoveAt(NumOfRows);
count = ObjectMessageDataTable.Rows.Count;
}
ObjectMessageDataTable.AcceptChanges();
View = ObjectMessageDataTable.DefaultView;
}
catch (Exception ex)
{
}
}
Run Code Online (Sandbox Code Playgroud)
我试过你的代码。直接对数据表进行数据绑定非常简单,闪烁就会消失:)。只需使用 ObjectMessageDataTable.DefaultView 而不是 View。因为每次创建 View 时都会创建 View 对象本身,这会导致数据网格从头开始初始化。
ItemsSource="{Binding Path=ObjectMessageDataTable.DefaultView, IsAsync=True, UpdateSourceTrigger=PropertyChanged}"
Run Code Online (Sandbox Code Playgroud)
所以改为
<DataGrid
Grid.Row="1"
Width="Auto"
Height="Auto"
Margin="0,20,0,0"
HorizontalAlignment="Center"
VerticalAlignment="Top"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center"
AlternatingRowBackground="WhiteSmoke"
AlternationCount="2"
AutoGenerateColumns="True"
BorderBrush="Black"
BorderThickness="1"
CanUserAddRows="False"
CanUserResizeRows="False"
CanUserSortColumns="False"
ColumnHeaderHeight="35"
EnableColumnVirtualization="True"
EnableRowVirtualization="True"
HorizontalScrollBarVisibility="Hidden"
ItemsSource="{Binding Path=ObjectMessageDataTable.DefaultView, IsAsync=True, UpdateSourceTrigger=PropertyChanged}"
RowHeight="30"
VerticalScrollBarVisibility="Hidden" />
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
2064 次 |
| 最近记录: |