单元格模板化文本框的 WPF 列表视图排序问题
本文关键字:列表 WPF 视图 排序 问题 文本 单元格 | 更新日期: 2023-09-27 18:34:05
WPF Listview 有问题。此列表视图绑定到数据库中的数据表。这里没有 MVVM。一切都在代码隐藏中。
在此列表视图中,第 3 列具有单元格模板。并且此列绑定到数据表中的税收百分比列。此税百分比列的类型为 varchar [这基于其他一些业务逻辑,因此无法更改数据类型]。
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Name="txt1" Text="{Binding taxpercent, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
PreviewTextInput="txt1_PreviewTextInput" Width="105">
<TextBox.BorderBrush>
<MultiBinding Converter="{StaticResource textComparer}">
<Binding Path="taxpercent" Mode="TwoWay" />
<Binding Path="taxpercent_val" Mode="TwoWay"/>
</MultiBinding>
</TextBox.BorderBrush>
</TextBox>
</DataTemplate>
加载列表视图时,它会填充数据库中的数据。假设列表视图中有 4 行数据。下面显示了"税"列。
Tax Percentage
--------------
2
1
4
3
在此之后,我编辑了税收百分比并单击 GridViewHeaderColumn 对其进行排序。它排序正确。现在排序顺序正在发送。下面是用于排序的代码。
ICollectionView dataView = CollectionViewSource.GetDefaultView(lvTax.ItemsSource);
if (dataView != null)
{
dataView.SortDescriptions.Clear();
SortDescription sd = new SortDescription("taxpercent", direction);
dataView.SortDescriptions.Add(sd);
dataView.Refresh();
}
第一次排序后,当我编辑或更改税百分比文本框中的值时,键入第一个数字后不久,它会自动再次排序!!表示编辑的行向下或向上取决于最后排序的方向!!
上面的事件处理程序"txt1_PreviewTextInput"只是为了使其成为数字文本框。我评论了上面的处理程序并尝试了。但是没有用。我在 XAML 中评论了多重绑定,但没有用。
可能是什么问题???
知道吗??
在
文本框绑定中将 UpdateSourceTrigger 更改为 LostFocus,目前,一旦用户开始键入,就会触发属性更改,在 LostFocus 上触发它后,您的网格将在失去焦点后立即排序。
<TextBox Name="txt1" Text="{Binding taxpercent, Mode=TwoWay, UpdateSourceTrigger=LostFocus}"
如果您只需要通过单击标题对其进行排序,请将绑定模式更改为 OneWay 例如
<TextBox Name="txt1" Text="{Binding taxpercent, Mode=OneWay}"
像这样更改排序代码
ICollectionView dataView = CollectionViewSource.GetDefaultView(lvTax.ItemsSource);
if (dataView != null)
{
using (dataView.DeferRefresh())
{
dataView.SortDescriptions.Clear();
SortDescription sd = new SortDescription("taxpercent", direction);
dataView.SortDescriptions.Add(sd);
}
}
这可能会阻止数据网格每次自动刷新
感谢马修·马内拉延迟自动刷新