我想在DataGrid上显示我的对象数据库
public class Student
{
public string Imie { get; set; }
public string Nazwisko { get; set; }
string Numer { get; set; }
internal List<Telefon> Telefony { get; set; }
internal Adres Adres { get; set; }
}
在 Adres 和 Telefon 课程中,我显然有一些额外的字段。
我的XAML:
<DataGrid Name="dataGrid" ItemsSource="{Binding Student}" AutoGenerateColumns="False" CellEditEnding="dataGrid_CellEditEnding" CurrentCellChanged="dataGrid_CurrentCellChanged" PreviewKeyDown="dataGrid_PreviewKeyDown">
<DataGrid.Columns>
<DataGridTextColumn Header="Imie" Binding="{Binding Imie}"/>
<DataGridTextColumn Header="Nazwisko" Binding="{Binding Nazwisko}"/>
<DataGridTextColumn Header="Numer" Binding="{Binding Numer}"/>
<DataGridTextColumn Header="Ulica" Binding="{Binding Adres.Ulica}"/>
<DataGridTextColumn Header="KodPocztowy" Binding="{Binding Adres.KodPocztowy}"/>
<DataGridTextColumn Header="Miasto" Binding="{Binding Adres.Miasto}"/>
<DataGridTextColumn Header="Tel. Numer" Binding="{Binding Telefon.Numer}"/>
<DataGridTextColumn Header="Tel. Operator" Binding="{Binding Telefon.Operator}"/>
</DataGrid.Columns>
</DataGrid>
我可以轻松获取并设置 Imie , Nazwisko 和 Numer 字段,但是当我尝试设置 Ulica ( Adres 类中的字段)编译器给了我这个例外:
InvalidOperationException was unhandled
Two-way binding requires Path or XPath.
感谢您的帮助。
答案 0 :(得分:1)
我怀疑 Adres
绑定属性为空所以当您尝试编辑绑定Binding="{Binding Adres.Ulica}"
的列值时,它会尝试为Adres.Ulica设置值但是Adres本身是空的。因此绑定在加载时无声地失败。
您必须确保为所有绑定对象初始化Adres
,以便您可以从dataGrid编辑其子属性Ulica
的值。
答案 1 :(得分:1)
在您的视图模型中,Telefony
和Adres
属性都声明为internal
。尝试将这些属性更改为public
。检查Binding Source Types
您可以绑定到公共属性,子属性以及索引器
您还提到可以让Numer
工作,但在示例代码中,它似乎被声明为private
,它不是有效的绑定源。
答案 2 :(得分:1)
问题是由于绑定成员名称中的。(点)。 请参阅: Binding to fields containing a period in DataTable in C#/WPF