gpt4 book ai didi

wpf - 如何将 List 作为 ItemSource 绑定(bind)到 XAML 中的 ListView?

转载 作者:行者123 更新时间:2023-12-04 21:53:22 30 4
gpt4 key购买 nike

我正在学习 WPF,并希望有一个类似于 LinkedList 的集合,我可以在其中添加和删除字符串。我希望有一个 ListView 来监听该集合的数据绑定(bind)。如何将简单列表集合绑定(bind)到 XAML 中的 ListView

我的想法(不工作)是这样的:

<Window x:Class="TestApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<LinkedList x:Key="myList"></LinkedList> //Wrong
<Window.Resources>
<Grid>
<ListView Height="100" HorizontalAlignment="Left" Margin="88,134,0,0"
Name="listView1" VerticalAlignment="Top" Width="120"
ItemsSource="{Binding Source={StaticResource myList}}"/> //Wrong
</Grid>
</Window>

我所有的代码(更新版本,不工作):

<Window x:Class="TestApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox Height="23" HorizontalAlignment="Left" Margin="12,12,0,0"
Name="textBox1" VerticalAlignment="Top" Width="120" />
<Button Content="Button" Height="23" HorizontalAlignment="Right"
Margin="0,12,290,0" Name="button1" VerticalAlignment="Top" Width="75"
Click="button1_Click" />
<ListView Height="100" HorizontalAlignment="Left" Margin="88,134,0,0"
Name="listView1" VerticalAlignment="Top" Width="120"
ItemsSource="{Binding myList}"/>
</Grid>
</Window>

C#-代码:

namespace TestApp
{
public partial class MainWindow : Window
{
ObservableCollection<string> myList = new ObservableCollection<string>();
public MainWindow()
{
InitializeComponent();
myList.Add("first string");
}

private void button1_Click(object sender, RoutedEventArgs e)
{
myList.Add(textBox1.Text);
textBox1.Text = myList.Count+"st";
}
}
}

最佳答案

选择作为答案的方法效果很好......但我不特别喜欢在 XAML 中设置其他所有内容时以编程方式指定 DataContext,我不觉得它是“正确的” “(也许这只是我)。因此,对于下一个人,或者任何像我一样思考并在搜索引擎中找到它的人(就像我一样),这是在 XAML 中执行此操作的方法:

C#

public sealed partial class MainPage : Page
{
public ObservableCollection<string> Messages { get; set; }

public MainPage()
{
this.Messages = new ObservableCollection<string>();
this.InitializeComponent();
}
}

XAML

<Window
....
DataContext="{Binding RelativeSource={RelativeSource Self}}"
...>

<ListView ItemsSource="{Binding Messages}" ... />

</Window>

老实说,我认为 {Binding RelativeSource={RelativeSource Self}} 应该是任何顶级元素(PageWindow)的默认值>,等等...) DataConext 因为这只是很多人期望它工作的方式,我知道这是我认为它会工作的方式。老实说,我觉得 {Binding RelativeSource={RelativeSource Self}} 有点冗长,对于较短的语法来说几乎很长。

关于wpf - 如何将 List 作为 ItemSource 绑定(bind)到 XAML 中的 ListView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3039628/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com