Jon*_*nas 3 data-binding collections wpf xaml listview
我正在学习WPF,并希望有一个类似于LinkedList的集合,我可以添加和删除字符串.我希望有一个ListView
用数据绑定来收听该集合.如何将简单列表集合绑定到ListView
XAML中?
我的想法(不工作)是这样的:
<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>
Run Code Online (Sandbox Code Playgroud)
我的所有代码(更新版本,不工作):
<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>
Run Code Online (Sandbox Code Playgroud)
C#-code:
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";
}
}
}
Run Code Online (Sandbox Code Playgroud)
选择作为答案的方法很好......但是我并不特别喜欢DataContext
在XAML中设置其他所有内容时必须以编程方式指定,我不觉得它是"正确的"(也许这只是我).所以对于下一个人,或者任何像我这样认为并从搜索引擎中发现这一点的人(就像我做的那样),这是在XAML中做到这一点的方法:
C#
public sealed partial class MainPage : Page
{
public ObservableCollection<string> Messages { get; set; }
public MainPage()
{
this.Messages = new ObservableCollection<string>();
this.InitializeComponent();
}
}
Run Code Online (Sandbox Code Playgroud)
XAML
<Window
....
DataContext="{Binding RelativeSource={RelativeSource Self}}"
...>
<ListView ItemsSource="{Binding Messages}" ... />
</Window>
Run Code Online (Sandbox Code Playgroud)
说实话,我认为{Binding RelativeSource={RelativeSource Self}}
应该是任何顶级元素(Page
,Window
等等)的默认值,DataConext
因为它只是很多人期望它的工作方式,我知道这是我认为它会起作用的方式.老实说,我觉得{Binding RelativeSource={RelativeSource Self}}
有点冗长,而且语法更短.
归档时间: |
|
查看次数: |
23925 次 |
最近记录: |