Могу ли я обновить столбец DataSource в MSTest?

Во-первых, вам нужно реализовать INotifyPropertyChanged в классе Pallet, чтобы вы создали способ представления представления для повторного чтения правильного значения; то вам нужно отслеживать событие PropertyChanged каждого элемента в коллекции, чтобы вы могли определить, изменилось ли свойство, при сохранении списка контролируемых элементов, синхронизированного с элементами в коллекции.

Pallet.cs:

public class Pallet : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public Pallet()
    {
        BoxesOnPallet = new ObservableCollection<Box>
        {
            new Box(3),
            new Box(8),
            new Box(5),
            new Box(1),
            new Box(0)
        };
    }

    private ObservableCollection<Box> _boxesOnPallet;
    public ObservableCollection<Box> BoxesOnPallet
    {
        get { return _boxesOnPallet; }
        set
        {
            if (_boxesOnPallet != null)
            {
                foreach (Box box in _boxesOnPallet)
                {
                    if (box != null)
                        box.PropertyChanged -= Box_PropertyChanged;
                }
                _boxesOnPallet.CollectionChanged -= BoxesOnPallet_CollectionChanged;
            }
            _boxesOnPallet = value;
            if (value != null)
            {
                foreach (Box box in value)
                {
                    if (box != null)
                        box.PropertyChanged += Box_PropertyChanged;
                }
                value.CollectionChanged += BoxesOnPallet_CollectionChanged;
            }
            OnPropertyChanged(nameof(BoxesOnPallet));
        }
    }

    private void BoxesOnPallet_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        if (e?.OldItems != null)
        {
            foreach (Box box in e.OldItems)
            {
                if (box != null)
                    box.PropertyChanged -= Box_PropertyChanged;
            }
        }
        if(e?.NewItems != null)
        {
            foreach (Box box in e.NewItems)
            {
                if (box != null)
                    box.PropertyChanged += Box_PropertyChanged;
            }
        }
    }

    private void Box_PropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        if (e.PropertyName.Equals(nameof(Box.NumberOfPiecesinBox)))
            OnPropertyChanged(nameof(ItemTotal));
    }

    public int ItemTotal
    {
        get { return BoxesOnPallet.Sum(x => x.NumberOfPiecesinBox); }
    }

    private void OnPropertyChanged(string propertyName)
    {
        var handler = PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(propertyName));
    }
}

Кроме того, привязка, упомянутая в файле XAML, кажется OneWay, что означает, что значение будет извлекаться из источника в представление, а не наоборот; вместо этого это должно быть привязка TwoWay. MainWindow.xaml:

...
<TextBox Text="{Binding NumberOfPiecesinBox, Mode=TwoWay}" Margin="10" Padding="3"/>
...
0
задан Yoiku 18 January 2019 в 22:23
поделиться