CellEditEnding не отправляет новое значение в SelectedItem Binding - PullRequest
0 голосов
/ 23 ноября 2018

Я запускаю ICommand, когда ячейка меняется в моем DataGrid:

PageStock.xaml

<DataGrid ItemsSource="{Binding StockQuantities}" 
            SelectedItem="{Binding SelectedStockQuantity}"
            x:Name="dataGridConsignments" 
            Margin="10,47,10,9.6"
            ColumnWidth="*" AutoGenerateColumns="False">

    <i:Interaction.Triggers>
        <i:EventTrigger EventName="CellEditEnding">
            <i:InvokeCommandAction Command="{Binding Test}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>

    <DataGrid.Columns>
        <DataGridTextColumn IsReadOnly="True" Header="Bell Number" Width="100" Binding="{Binding BellNumber}"></DataGridTextColumn>
        <DataGridTextColumn IsReadOnly="True" Header="Description" Binding="{Binding Description}"></DataGridTextColumn>
        <DataGridTextColumn IsReadOnly="False" Header="Quantity" Width="100" Binding="{Binding Quantity}" ></DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

Но когда ICommand горит, я вижу, что SelectedStockQuantity по-прежнему содержит старый Quantity:

PageStockViewModel.cs

public StockQuantityViewModel SelectedStockQuantity { get; set; }
private ICommand test;
public ICommand Test
{
    get
    {
        return test
            ?? (test = new ActionCommand(() =>
            {
                var stockQ = StockQuantities.FirstOrDefault(sq => SelectedStockQuantity.Id == sq.Id);
                Commands.UpdateStockQuantity(stockQ.BellNumber, SelectedStockQuantity.Quantity);
            }));
    }
}

Если я затем снова изменить ячейку безпри переходе на новую страницу будет применено предыдущее значение (я вижу его в SelectedStockQuantity.Quantity)

Почему это происходит?Как я могу получить только что отредактированное значение в моем ICommand?

StockQuantityViewModel

class StockQuantityViewModel : BaseViewModel
{
    public int Id { get; set; }
    public StockQuantity StockQuantity { get; set; }
    public string BellNumber { get; set; }
    public string ArtemisNumber { get; set; }
    public int Quantity { get; set; }
    public string Description { get; set; }

    public StockQuantityViewModel(StockQuantity stockQuantity)
    {
        StockQuantity = stockQuantity;

        Id = stockQuantity.id;
        BellNumber = stockQuantity.Part.BellNumber;
        ArtemisNumber = stockQuantity.Part.ArtemisNumber;
        Quantity = stockQuantity.Quantity;
        Description = stockQuantity.Part.Description;
    }
}

1 Ответ

0 голосов
/ 23 ноября 2018

Кажется, что работает после внесения этого изменения:

<DataGridTextColumn IsReadOnly="False" Header="Quantity" Width="100" 
    Binding="{Binding Quantity,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" >
</DataGridTextColumn>

Я добавляю это к Binding:

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