我正在尝试从我正在构建的用户控件中使用WPF DataGrid . 事情似乎很好 . 但我在IDE的“输出”窗口中注意到此消息:
System.Windows.Data错误:39:BindingExpression路径错误:'对象'''对象'(HashCode = 18165668)'上找不到'名称'属性 . BindingExpression:路径=名称; DataItem ='Object'(HashCode = 18165668); target元素是'TextBlock'(Name ='');目标属性是'文本'(类型'字符串')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;
}
}
}
任何想法都表示赞赏 . 谢谢 .
2 回答
很难理解为什么要这样做,但我想我可以帮助你理解为什么会给你这个错误 .
<toolkit:DataGridTextColumn Header="Name" Binding="{Binding Name}"/> <toolkit:DataGridComboBoxColumn Header="Department" x:Name="_Departmens" SelectedItemBinding="{Binding Department}"/>
您绑定到名为
Name
的属性,但如果您按照代码,您的项目源(在MyDataGrid中)指向MyData
.MyData
不会出现在MyDataGrid
UserControl内的任何位置 .你拥有的是一个名为
TestData
的属性但由于TestData
没有名为Name
的属性而无法工作在我看来,你应该忘记数据表和所有这些东西,简单地创建你的对象,将它们放在List中,使用该列表作为你的数据源,就是这样 .
HTH
是否显示“新项占位符”行?因为如果是,那就是导致输出绑定错误的那个 .
占位符项的datacontext是一个空对象 - 它自然不具有其他行的属性 .
所以一切都很好 - 如果你多次获得相同的消息(每行一个,然后一个占位符),你就会遇到麻烦:) .