我有一个DataGrid回合到类型化DataTable的DataView属性但是当我单击Generate Columns时,我得到“你必须先设置ItemsSource才能执行这个动作”。不知道我在这里做错了什么。请参阅下面的XAML:
<DataGrid AutoGenerateColumns="True" HorizontalAlignment="Stretch"
Margin="0" Name="dataGrid1" VerticalAlignment="Stretch"
ItemsSource="{Binding Path=DataView/}"
DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=my:MainWindow, AncestorLevel=1},
Path=TransferSchedulesView/}">
TransferSchedulesView是我的MainWindow上的一个属性,它公开了一个类型化的DataTable成员的DataView属性。关于我在哪里出错的任何建议?
答案 0 :(得分:1)
我看到你的绑定可能不正确。从绑定中删除前导斜杠,因为绑定的内容不是集合,因此它没有当前项。
以下是我在尝试您的示例时在输出中看到的内容:
System.Windows.Data错误:40:BindingExpression路径错误:'' “当前收藏品”上找不到的物业 ''TransferSchedulesView'(HashCode = 19117974)'。 BindingExpression:路径= TransferSchedulesView /;的DataItem = '主窗口' (名称= ''); target元素是'DataGrid'(Name ='dataGrid1');目标 property是'DataContext'(类型'Object')
这是我的工作示例。如果你运行它,你会看到自动生成的列:
<DataGrid AutoGenerateColumns="True"
ItemsSource="{Binding Path=DataView}"
DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=WpfApplication1:MainWindow, AncestorLevel=1}, Path=TransferSchedulesView}" />
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public TransferSchedulesView TransferSchedulesView { get; set; }
public MainWindow()
{
InitializeComponent();
TransferSchedulesView = new TransferSchedulesView(){DataView = CreateTable()};
}
private static DataTable CreateTable()
{
var dataTable = new DataTable();
dataTable.Columns.Add("aaa");
dataTable.Columns.Add("bbb");
dataTable.Columns.Add("ccc");
dataTable.Rows.Add("sdaasdasd", "dsdsadasdasdsd", "sdasdadsadsadsd");
dataTable.Rows.Add("sdaasdasd", "dsdsadasdasdsd", "sdasdadsadsadsd");
dataTable.Rows.Add("sdaasdasd", "dsdsadasdasdsd", "sdasdadsadsadsd");
return dataTable;
}
}
public class TransferSchedulesView
{
public DataTable DataView { get; set; }
}
}