Для двухсторонней привязки требуется Path или XPath, привязка DataGrid

1

У меня есть 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>

ViewModel:

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". Что я делаю не так?

Теги:
wpf
data-binding
datagrid

2 ответа

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());
}

Вам нужно добавить элементы в список, равный индексу, который вы связываете с пользовательским интерфейсом (точнее, 7 элементов).

  • 1
    Большое спасибо, я уже пытался присвоить коллекцию, но не добавил никаких «InloopParameter's»
  • 0
    Рад помочь товарищу .. !!
0

Свойство Parameters равно null. Обязательно назначьте коллекцию свойству в конструкторе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню