我在WinUI 3应用程序(目标框架net6.0-windows10.0.19041.0)中有一个ListView,它的数据模板包含一个TextBox。ItemsSource绑定到代码隐藏文件中的ObservableCollection。列表后面还有一个按钮,用于清除集合和添加新项。
我注意到一个奇怪的行为:如果我在TextBox中写入任何内容,则在单击Clear按钮后该文本将保留。我希望它在ListView中插入一个全新的TextBox,其中没有任何文本。
为什么会发生这种情况?它是否与虚拟化有关?
下面是xaml文件:
<Window
x:Class="WinUISample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:WinUISample"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<ListView ItemsSource="{x:Bind _items }" >
<ListView.ItemTemplate>
<DataTemplate x:DataType="x:String">
<TextBox Width="250" /> <!-- intentionally empty -->
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<Button Click="myButton_Click">Clear</Button>
</StackPanel>
</Window>
下面是代码隐藏文件:
using Microsoft.UI.Xaml;
using System.Collections.ObjectModel;
namespace WinUISample
{
public sealed partial class MainWindow : Window
{
private readonly ObservableCollection<string> _items;
public MainWindow()
{
InitializeComponent();
_items = new ObservableCollection<string>(new[]
{
"1"
});
}
private void myButton_Click(object sender, RoutedEventArgs e)
{
_items.Clear();
_items.Add("1");
}
}
}
1条答案
按热度按时间hgc7kmma1#
这应该是因为它的Virtualization特性。因为你没有绑定你的
Text
,你会得到相同的文本。您可以通过绑定
Text
来避免这种行为,或者通过改变
ItemsPanel
来实现。