![](/img/trans.png)
[英]Show object details using WinUI 3.0 ListView with Grouped Headers
[英]ListView in WinUI maintains ListBox text after reset
我在 WinUI 3 應用程序(目標框架 net6.0-windows10.0.19041.0)中有一個 ListView,其數據模板包含一個 TextBox。 ItemsSource 綁定到代碼隱藏文件中的 ObservableCollection。 列表后還有一個按鈕,用於清除集合並添加新項目。
我注意到一個奇怪的行為:如果我在 TextBox 中寫了任何內容,那么在我單擊“清除”按鈕后,該文本將被保留。 我希望它在 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");
}
}
}
這應該是因為它的虛擬化功能。 由於您沒有綁定Text
,因此您將獲得相同的文本。
您可以通過綁定Text
來避免這種行為,
<TextBox Width="250" Text="{x:Bind}" />
或通過更改ItemsPanel
。
<ListView ItemsSource="{x:Bind _items}" >
<!--<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>-->
<ListView.ItemTemplate>
<DataTemplate x:DataType="x:String">
<TextBox Width="250" />
<!-- intentionally empty -->
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.