Jas*_*zek 22 c# data-binding wpf
让我们说比如我有以下非常简单的窗口:
<Window x:Class="CalendarGenerator.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1"
Height="300"
Width="447">
<Grid>
<ListBox Margin="12,40,0,12"
Name="eventList"
HorizontalAlignment="Left"
Width="134" />
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
一个简单的列表定义为:
List<String> ListOfNames = new List<String>();
Run Code Online (Sandbox Code Playgroud)
并且假设列表中有多个名称.我将如何去使用尽可能多的列表绑定到ListBox代码隐藏的可能吗?
Mat*_*ton 39
首先你需要给你的列表框的名称,以便它从后面的代码访问(编辑我注意到你已经做到了这一点,所以我会改变我的例子ListBox的名称,以反映你的):
<ListBox x:Name="eventList" ... />
Run Code Online (Sandbox Code Playgroud)
然后就像将ListBox的ItemsSource属性设置为列表一样简单:
eventList.ItemsSource = ListOfNames;
Run Code Online (Sandbox Code Playgroud)
由于您已将"ListOfNames"对象定义为a List<String>,因此ListBox不会自动反映对列表所做的更改.要使WPF的数据绑定对列表中的更改做出反应,请将其定义为ObservableCollection<String>.
Cam*_*and 19
如果数据列表是在代码中创建的,那么您将不得不在代码中绑定它,如下所示:
eventList.ItemsSource = ListOfNames;
Run Code Online (Sandbox Code Playgroud)
现在绑定到字符串列表是一个非常简单的例子.让我们来看一个更复杂的.
假设你有一个人类:
public class Person {
public string FirstName { get; set; }
public string Surname { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
要显示一个列表,您可以将列表绑定到ListBox,但最终会出现一个列表框,显示每个条目的"Person",因为您没有告诉WPF如何显示person对象.
为了告诉WPF如何直观地显示数据对象,我们定义了一个DataTemplate,如下所示:
<Window.Resources>
<DataTemplate DataType="{x:Type l:Person}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding FirstName}"/>
<TextBlock Text=" "/>
<TextBlock Text="{Binding Surname}"/>
</StackPanel>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox Name="listBox" />
</Grid>
public Window1() {
InitializeComponent();
List<Person> people = new List<Person>();
people.Add(new Person() { FirstName = "Cameron", Surname = "MacFarland" });
people.Add(new Person() { FirstName = "Bea", Surname = "Stollnitz" });
people.Add(new Person() { FirstName = "Jason", Surname = "Miesionczek" });
listBox.ItemsSource = people;
}
Run Code Online (Sandbox Code Playgroud)
这将在列表中很好地显示"Firstname Surname".
如果你想将外观更改为" Surname,Firstname",你需要做的就是将XAML更改为:
<StackPanel Orientation="Horizontal">
<TextBlock FontWeight="Bold" Text="{Binding Surname}"/>
<TextBlock Text=", "/>
<TextBlock Text="{Binding FirstName}"/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
aku*_*aku 15
如果要自定义绑定,请使用Binding类:
List<String> listOfNames = new List<String>() {"a", "b"};
Binding myBinding = new Binding();
//set binding parameters if necessary
myBinding.Source = listOfNames;
eventList.SetBinding(ItemsControl.ItemsSourceProperty, myBinding);
Run Code Online (Sandbox Code Playgroud)
要么
直接将数据分配给ItemsSource属性:
eventList.ItemsSource = listOfNames;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75296 次 |
| 最近记录: |