Привязать управляющее событие к коду событие / команда / метод - PullRequest
1 голос
/ 09 мая 2019

У меня есть сетка данных, которую я хотел бы, чтобы при изменении значений в любой ячейке в графическом интерфейсе обновлялись другие свойства модели представления.

Я видел это , но мне интересно,может быть сделано путем привязки события, такого как SourceUpdated или CurrentCellChanged, например:

(просмотр)

<DataGrid ItemsSource="{Binding Terrain, Mode=TwoWay, NotifyOnSourceUpdated=True}" 
          Grid.Column="0" Grid.Row="15" Grid.ColumnSpan="1" 
          AutoGenerateColumns="True"
          CanUserAddRows="True" 
          CanUserDeleteRows="True"
          SourceUpdated="{Binding TerrainChangedEvent }" Margin="0,6,0,20" Grid.RowSpan="2"/>

и в модели представления

public EventHandler<EventArgs> TerrainChangedEvent;
public ObservableCollection<TerrainSpec> Terrain
{
    get { return _terrain; }
    set { _terrain = value; ReCalcOtherProperty();  RaisePropertyChanged(nameof(Terrain));
}

public TerrainViewModel()
{
    Terrain = new ObservableCollection<TerrainSpec>()
    TerrainChangedEvent += RaiseTerrainChanged;
}
private void RaiseTerrainChanged(object sender, EventArgs e)
{
    ReCalcOtherProperty();
    RaisePropertyChanged(nameof(Terrain));
}

и модель

public class TerrainSpec : INotifyPropertyChanged
{
    private double _height;
    private double _distance;

    public double Distance
    {
        get { return _distance; }
        set { _distance = value; RaisePropertyChanged(nameof(Distance)); }
    }
    public double Height
    {
        get { return _height; }
        set { _height = value; RaisePropertyChanged(nameof(Height)); }
    }

    public override string ToString()
    {
        return $"{Distance:F2} m, {Height:F2} m";
    }

    #region PropertyChanged
    public event PropertyChangedEventHandler PropertyChanged;
    protected void RaisePropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    #endregion
}

Однако при попытке запуска выдается ошибка:

InvalidCastException: невозможно преобразовать объект типа 'System.Reflection.RuntimeEventInfo'набрать 'System.Reflection.MethodInfo'

Есть ли способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...