更新的属性没有反映在屏幕上

本文关键字:屏幕 属性 更新 | 更新日期: 2023-09-27 17:51:08

我有一个Datagrid如下

            <DataGridTextColumn Header="Amount" CellStyle="{StaticResource RightAlignedCellStyle}" Binding="{Binding AmountToAllocate, UpdateSourceTrigger=LostFocus,  StringFormat='{}{0:#,0.00}'}" />
            <DataGridTemplateColumn Header="Comment" Width="*" IsReadOnly="True">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Comment}" TextWrapping="WrapWithOverflow"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Button Content="Add This Allocation" Command="ac:PICommands.AddAllocation"  />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

您将看到Grid的ItemSource是属性RenewalRows,它是一个ObservableCollection,如下所示:-

public ObservableCollection<Data.Payment.UnitRenewalsRow> RenewalRows
{
    get
    {
        return renewalRows;
    }
    set
    {
        renewalRows = value;
        OnPropertyChanged("RenewalRows");
    }
}

SelectedItem被绑定到SelectedRenewalRow属性如下:-

public Data.Payment.UnitRenewalsRow SelectedRenewalRow
{
    get
    {
        return renewalsRow;
    }
    set
    {
        renewalsRow = value;
        //FullAllocationAmount();
        OnPropertyChanged("SelectedRenewalRow");
    }
}

在最后一列有一个调用命令的按钮。背后的代码如下:-

private  void Allocate(object sender, ExecutedRoutedEventArgs e)
{
    ap.AddAnAllocation();
}

ap是DataGrid ItemsSource="{Binding Source={StaticResource AllocatePaymentClass}, Path=RenewalRows}”中引用的StaticResource类代码如下:-

public void AddAnAllocation()
{
    SelectedRenewalRow.Outstanding = SelectedRenewalRow.Outstanding + SelectedRenewalRow.AmountToAllocate;
    Allocation allocation = new Allocation();
    allocation.Amount = SelectedRenewalRow.AmountToAllocate;
    allocation.PaymentInfo = Payment;
    allocation.RenewalInfo = SelectedRenewalRow;
    allocation.Propref = PropRef;
    allocation.FullAddress = FullAddress;
    Allocations.Add(allocation);
    Payment.Allocations = Allocations;

    //reset
    SelectedRenewalRow.AmountToAllocate = 0;
}

我的问题是最后一行。一旦用户单击调用AddAnAllocation()的按钮,我希望屏幕立即使用AmountToAllocate属性更新DataGrid中的选定行以显示为零。该属性是上面显示的RenewalRows属性项上的一个字段。屏幕最终会更新,但只有在该行被取消选择然后重新选择之后,有时甚至只有在几秒钟后才会更新。

任何想法?如果您需要更多的信息或代码,请随时询问。

更新的属性没有反映在屏幕上

我不确定这是否有任何帮助,但似乎使用DataTables + datarow可能会导致过去与其他人的问题。

看这里