我正在尝试从我正在构建的用户控件中使用WPF DataGrid。事情似乎很好。但是我在IDE的“输出”窗口中注意到了这条消息:
System.Windows.Data错误:39:BindingExpression路径错误:'对象'''对象'(HashCode = 18165668)'上找不到'名称'属性。 BindingExpression:路径=名称; DataItem ='Object'(HashCode = 18165668); target元素是'TextBlock'(Name =''); target属性是'Text'(类型'String') System.Windows.Data错误:39:BindingExpression路径错误:在'对象'''对象'(HashCode = 18165668)'上找不到'部门'属性。 BindingExpression:路径=名称; DataItem ='Object'(HashCode = 18165668); target元素是'TextBlockComboBox'(Name =''); target属性是'SelectedItem'(类型'String')
我要做的是从XAML手动向DataGrid添加列,并将它们绑定到我在C#代码中的对象。
这是我的XAML代码:
<UserControl x:Class="Sting.Utilities.MyDataGrid" Name="This"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
Height="600" Width="800">
<Grid>
<toolkit:DataGrid AutoGenerateColumns="False" Name="myDataGrid" Margin="10" ItemsSource="{Binding ElementName=This, Path=MyData}">
<toolkit:DataGrid.Columns>
<toolkit:DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<toolkit:DataGridComboBoxColumn Header="Department" x:Name="_Departmens" SelectedItemBinding="{Binding Department}"/>
</toolkit:DataGrid.Columns>
</toolkit:DataGrid>
</Grid>
</UserControl>
这是我的C#代码:
namespace Sting.Utilities
{
///
/// Interaction logic for UserControl1.xaml
///
public partial class MyDataGrid : UserControl
{
DataTable _myData;
public DataTable TestData { get { return _testData; } }
public MyDataGrid()
{
// Initialize data table
_myData = new DataTable();
_testData.Columns.Add(new DataColumn("Name", typeof(string)));
_testData.Columns.Add(new DataColumn("Department", typeof(string)));
// Temp Code: User should add rows
DataRow row = _testData.NewRow();
row["Name"] = "John Smith";
row["Department"] = "Accounting";
_testData.Rows.Add(row);
// Initialize combo boxes
List departmentComboBoxList = new List() {"Accounting", "Purchasing", "Engineering"};
_Departments.ItemsSource = departmentComboBoxList;
}
}
}
任何想法都表示赞赏。谢谢。
答案 0 :(得分:1)
很难理解为什么要这样做,但我想我可以帮助你理解为什么会给你这个错误。
<toolkit:DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<toolkit:DataGridComboBoxColumn Header="Department" x:Name="_Departmens" SelectedItemBinding="{Binding Department}"/>
您绑定到名为Name
的属性,但如果您按照代码,您的项目源(在MyDataGrid中)指向MyData
。 MyData
UserControl中没有出现MyDataGrid
。
你拥有的是一个名为TestData
的属性,但由于不起作用
TestData
没有名为Name
在我看来,你应该忘记数据表和所有这些东西,简单地创建你的对象,把它们放在一个List中,使用那个列表作为你的数据源就是这样。
HTH
答案 1 :(得分:1)
是否显示“新项目占位符”行?因为如果是,那就是导致输出绑定错误的那个。
占位符项的datacontext是一个空对象 - 它自然不具有其他行的属性。
所以,一切都很好 - 如果您多次获得相同的消息(每行一个,然后一个占位符),则会遇到麻烦:)。