【发布时间】:2013-05-22 09:08:38
【问题描述】:
我有一个带有private List<Tuple<string, string, char>> _trasitions 的窗口。
在同一个窗口中有一个名为dataTrans 的DataGrid。如何绑定(最好在 XAML 中)_transitions 到 dataTrans.ItemsSource?
【问题讨论】:
我有一个带有private List<Tuple<string, string, char>> _trasitions 的窗口。
在同一个窗口中有一个名为dataTrans 的DataGrid。如何绑定(最好在 XAML 中)_transitions 到 dataTrans.ItemsSource?
【问题讨论】:
您可以在此处查看示例代码:您必须这样做。
1。将列表移动到视图模型类。
2。公开该列表的公共属性。
3。将窗口的数据上下文设置为 viewmodel 类的实例。
4。将属性绑定到 XAML 中数据网格的 ItemSource。
下面给出的示例代码
XAML:
<Window x:Class="TestWPFApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestWPFApp"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid ItemsSource="{Binding Transitions}" AutoGenerateColumns="False" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn x:Name="firstColumn" Header="First" Binding="{Binding Path=Item1, Mode= OneWay}"></DataGridTextColumn>
<DataGridTextColumn x:Name="secondColumn" Header="Second" Binding="{Binding Path=Item2, Mode= OneWay}"></DataGridTextColumn>
<DataGridTextColumn x:Name="thirdColumn" Header="Third" Binding="{Binding Path=Item3, Mode= OneWay}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
代码背后:
using System.Windows;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System;
namespace TestWPFApp
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainViewModel();
}
}
public class MainViewModel
{
private List<Tuple<string, string, char>> _transitions = new List<Tuple<string, string, char>>();
public MainViewModel()
{
Transitions.Add(new Tuple<string,string,char>("First Item 1","Second Item 1",'A'));
Transitions.Add(new Tuple<string, string, char>("First Item 2", "Second Item 2", 'B'));
Transitions.Add(new Tuple<string, string, char>("First Item 3", "Second Item 3", 'C'));
Transitions.Add(new Tuple<string, string, char>("First Item 4", "Second Item 4", 'D'));
}
public List<Tuple<string, string, char>> Transitions
{
get { return _transitions; }
set
{
_transitions = value;
}
}
}
}
【讨论】:
您必须将集合公开为公共属性才能绑定到它。
public List<Tuple<string, string, char>> Transitions
{
get { return this.transitions };
}
我还建议定义一个类型而不是使用 Tuple,如果您希望 UI 收到集合更改的通知,那么您应该将集合设为 ObservableCollection 而不是 List。
如果集合引用发生更改,您还需要实现 INotifyPropertyChanged 并在引用更改时调用 PropertyChanged 事件(例如在 setter 中)。
要绑定DataGrid,请设置其ItemsSource 属性:
<DataGrid ItemsSource="{Binding Transitions}" ... />
您必须确保DataGrid 的数据上下文是您的视图模型的一个实例。请参阅http://wpftutorial.net/DataGrid.html 了解更多信息。
【讨论】:
【讨论】: