将 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>
在此示例中,我将带有 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 开发平台的模式)并按照你提到的(在问题中)那样做在网上找到很多例子。
在代码中我可以做 "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>
在此示例中,我将带有 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 开发平台的模式)并按照你提到的(在问题中)那样做在网上找到很多例子。