将 ItemsSource 设置为一个简单的集合

Setting ItemsSource to a simple collection

在代码中我可以做 "listView.ItemsSource = testlist" 但我如何在 XAML 中做同样的事情?

我的 Window class 有:

List<string> testlist = new List<string>();

在构造函数中我有:

listView.ItemsSource = testlist;

XAML是:

<ListView x:Name="listView" Margin="0" />

如果我添加到测试列表,我就会得到列表,但我无法弄清楚在 XAML 中分配 ItemsSource 的语法是什么。换句话说,我想知道如何在 XAML 而不是代码中分配 ItemsSource。

我的印象是XAML一定要把一切都搞复杂了。

我确定已经有了答案,但我找不到任何答案。我看过很多问题和文章。所有的问题和文章都是关于更复杂的需求,或者只是部分的,即使样本这么小也不会显示所有部分。

我真正想做的是为其中包含 TextBox 的 ListView 创建一个模板,但我希望至少能够在没有它的情况下做到这一点。

澄清:我正在尝试在代码中使用现有的 class(例如 List)进行所有绑定,而无需创建额外的 class 只是为了如果可能的话,保存一个字符串数组。我想知道最简单的解决方案是什么。

以下是完整的主要Window代码:

public partial class MainWindow : Window
{
    List<string> testlist = new List<string>();

    public MainWindow()
    {
        InitializeComponent();
        testlist.Add("One");
        testlist.Add("Two");
        testlist.Add("Three");
    }
}

以下是除Window标签外的XAML:

<Grid>
    <ListView x:Name="listView" Margin="0" />
</Grid>

您可以使用 MVVM。 简单示例 here.

在此示例中,我将带有 TextBlock 和 Button 的 ListBox 绑定到 ViewModel。然后我通过代码将几个项目添加到 ListBox。

您可以通过在绑定上指定 RelativeSource 来绑定到代码隐藏中的 属性。检查 this.

RelativeSource={RelativeSource Self}

在你的情况下,你可以在后面的代码中创建一个 属性 testlist 和下面的 xaml.

代码隐藏

public ObservableCollection<string> testlist { get; set; } = new ObservableCollection<string>();

XAML

<Window ...
    DataContext="{Binding RelativeSource={RelativeSource Self}}">
      <Grid >
         <ListView ItemsSource="{Binding testlist}"/>
      </Grid>
</Window>

I just cannot figure out what the syntax is to assign the ItemsSource in XAML.

您可以在 Xaml 文件中按照定义设置 ItemsSource

<ListView x:Name="listView" Margin="0" ItemsSource="{Binding}">

并在 Xaml.cs 文件中,设置 DataContext.

public MainWindow()
{
    InitializeComponent();      
    this.DataContext = list; // set your DataContext
}

上面的事情可能会奏效,但我建议探索 MVVM(现代 UI 开发平台的模式)并按照你提到的(在问题中)那样做在网上找到很多例子。