DataGrid - "双向绑定需要Path或XPath。"

时间:2014-03-23 18:24:36

标签: c# wpf xpath datagrid

我想在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.

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

我怀疑 Adres绑定属性为空所以当您尝试编辑绑定Binding="{Binding Adres.Ulica}"的列值时,它会尝试为Adres.Ulica设置值但是Adres本身是空的。因此绑定在加载时无声地失败。

您必须确保为所有绑定对象初始化Adres ,以便您可以从dataGrid编辑其子属性Ulica的值。

答案 1 :(得分:1)

在您的视图模型中,TelefonyAdres属性都声明为internal。尝试将这些属性更改为public。检查Binding Source Types

  

您可以绑定到公共属性,子属性以及索引器

您还提到可以让Numer工作,但在示例代码中,它似乎被声明为private,它不是有效的绑定源。

答案 2 :(得分:1)

问题是由于绑定成员名称中的。(点)。 请参阅: Binding to fields containing a period in DataTable in C#/WPF