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

时间:2016-06-13 02:59:05

标签: c# wpf xaml itemssource

在代码中我可以执行“listView.ItemsSource = testlist”但是如何在XAML中执行相同操作?

My Window类有:

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

在构造函数中我有:

listView.ItemsSource = testlist;

XAML是:

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

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

我的印象是XAML必须使一切变得复杂。

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

我真正想做的是为ListView创建一个带有TextBox的模板,但我希望至少能够做到这一点。

澄清:我试图在代码和现有的类(如List)中进行所有绑定,而不创建额外的类只是为了保存字符串数组(如果可能的话)。我想知道最简单的解决方案是什么。

以下是完整的MainWindow代码:

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>

3 个答案:

答案 0 :(得分:2)

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

RelativeSource={RelativeSource Self}

在您的情况下,您可以在后面的代码和以下xaml中创建属性测试列表。

<强>代码隐藏

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

<强> XAML

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

答案 1 :(得分:1)

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

在这个例子中,我将ListBox与TextBlock和Button绑定到ViewModel。然后我通过代码将一些项添加到ListBox。

答案 2 :(得分:1)

  

我无法弄清楚分配ItemsSource的语法是什么   在XAML。

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

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

并在Xaml.cs文件中设置DataContext

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

上面的事情可能有用,但我建议探索MVVM(现代UI开发平台的模式),并按照你提到的(在问题中)你可以在网上找到大量的例子。