【问题标题】:Two way binding requires Path or XPath, DataGrid binding两种方式绑定需要 Path 或 XPath,DataGrid 绑定
【发布时间】:2014-11-29 07:26:24
【问题描述】:

我有一个要由用户填写的 DataGrid,XAML:

<DataGrid ItemsSource="{Binding Path=Input.InloopAangepast, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Path=TypeOppervlak}"/>
        <DataGridTextColumn Binding="{Binding Path=TypeAfstroming}"/>
        <DataGridTextColumn Binding="{Binding Path=Parameters[0].Double}"/>
        <DataGridTextColumn Binding="{Binding Path=Parameters[1].Double}"/>
        <DataGridTextColumn Binding="{Binding Path=Parameters[2].Double}"/>
        <DataGridTextColumn Binding="{Binding Path=Parameters[3].Double}"/>
        <DataGridTextColumn Binding="{Binding Path=Parameters[4].Double}"/>
        <DataGridTextColumn Binding="{Binding Path=Parameters[5].Double}"/>
        <DataGridTextColumn Binding="{Binding Path=Parameters[6].Double}"/>
    </DataGrid.Columns>
</DataGrid>

视图模型:

InloopAangepast = new ObservableCollection<Inloop>();

还有:

public class Inloop : INotifyPropertyChanged
{
    public Inloop()
    {
        Parameters =  new ObservableCollection<InloopParameter>();
    }

    private string _typeOppervlak;
    private string _typeAfstroming;
    private string _omschrijving;
    public ObservableCollection<InloopParameter> _parameters;

    public string TypeOppervlak
    {
        get
        {
            return _typeOppervlak;
        }
        set
        {
            _typeOppervlak = value;
            if (PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs("TypeOppervlak"));
            }
        }
    }

    public string TypeAfstroming
    {
        get
        {
            return _typeAfstroming;
        }
        set
        {
            _typeAfstroming = value;
            if (PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs("TypeAfstroming"));
            }
        }
    }

    public string Omschrijving
    {
        get
        {
            return _omschrijving;
        }
        set
        {
            _omschrijving = value;
            if (PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs("Omschrijving"));
            }
        }
    }

    public ObservableCollection<InloopParameter> Parameters
    {
        get
        {
            return _parameters;
        }
        set
        {
            _parameters = value;
            if (PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs("Parameters"));
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

public class InloopParameter : INotifyPropertyChanged
{
    public InloopParameter()
    {

    }

    private string _naam;
    private string _string;
    private double? _double;

    public string Naam
    {
        get
        {
            return _naam;
        }
        set
        {
            _naam = value;
            if (PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs("Naam"));
            }
        }
    }

    public string String
    {
        get
        {
            return _string;
        }
        set
        {
            _string = value;
            if (PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs("String"));
            }
        }
    }

    public double? Double
    {
        get
        {
            return _double;
        }
        set
        {
            _double = value;
            if (PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs("Double"));
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

我可以很好地输入前两个字段(TypeOppervlak 和 TypeAfstroming),但是当我输入其他字段之一时,我收到错误消息“双向绑定需要 Path 或 XPath”。我做错了什么?

【问题讨论】:

    标签: c# wpf data-binding datagrid


    【解决方案1】:

    您需要初始化列表 _parameters 以便用户可以编辑它们。在构造函数中初始化它:

    public Inloop()
    {
        _parameters = new ObservableCollection<InloopParameter>();
        _parameters.Add(new InloopParameter());
        _parameters.Add(new InloopParameter());
        _parameters.Add(new InloopParameter());
        _parameters.Add(new InloopParameter());
        _parameters.Add(new InloopParameter());
        _parameters.Add(new InloopParameter());
        _parameters.Add(new InloopParameter());
    }
    

    您需要在列表中添加与您在 UI 上绑定的索引相同的项目(准确地说是 7 个项目)

    【讨论】:

    • 非常感谢,我已经尝试分配一个集合但没有添加任何“InloopParameter's”
    • 很高兴能帮助交配..!!
    【解决方案2】:

    Parameters 属性为空。确保将集合分配给构造函数中的属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-30
      • 2011-11-29
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多