我有ObservableCollection<MyType>
,其中MyType
使用Fody实现INotifyPropertyChanged
。
这个集合被绑定到我的ui,因为这个
<Grid x:Name="DetallePresupuesto" Grid.Row="2">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Text="{x:Static resources:Labels.SALUD_DetallePresupuesto}" Background="Bisque" TextAlignment="Center"/>
<DataGrid
x:Name="DetallePresupuestoGrid"
Grid.Row="1"
Grid.ColumnSpan="1"
AutoGenerateColumns="False"
Style="{DynamicResource ParadigmaNDataGrid}"
ItemsSource="{Binding Path=DetallePresupuesto,UpdateSourceTrigger=PropertyChanged}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<cmd:EventToCommand Command="{Binding ItemSelectionChangedCommand}" CommandParameter="{Binding ElementName=DetallePresupuestoGrid, Path=SelectedItem}"/>
</i:EventTrigger>
<i:EventTrigger EventName="AddingNewItem">
<cmd:EventToCommand Command="{Binding InsertItemCommand}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<DataGrid.Columns>
<DataGridTemplateColumn Header="{x:Static resources:Labels.GENERAL_Item}" Width="10*" ClipboardContentBinding="{x:Null}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Merlin_ConceptosFacturacion.StrDescripcionConcepto}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<controls:Search SearchParms="{Binding ElementName=EstaVentana,Path=DataContext.BusqItems}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="{x:Static resources:Labels.GENERAL_Cantidad}" Width="2*" Binding="{Binding Path=NumCantidad}" ClipboardContentBinding="{x:Null}"/>
<DataGridTextColumn Header="{x:Static resources:Labels.GENERAL_ValorUnitario}" Width="2.5*" Binding="{Binding Path=NumValorFacturacionDigitado}" ClipboardContentBinding="{x:Null}"/>
<DataGridTextColumn Header="{x:Static resources:Labels.GENERAL_ValorTotal}" Width="2.5*" Binding="{Binding Path=NumValor}" ClipboardContentBinding="{x:Null}"/>
<DataGridTemplateColumn Width="70" Header="{x:Static resources:Labels.GENERAL_BorrarItem}" HeaderStyle="{StaticResource ResourceKey=ParadigmaNDataGridHeaderStyle}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Style="{StaticResource InLineDeleteButton}" Command="{Binding Path=DataContext.DeleteCommand, ElementName=EstaVentana}" CommandParameter="{Binding ElementName=DetallePresupuestoGrid,Path=SelectedItem}" Visibility="{Binding Merlin_ConceptosFacturacion.NumIdConcepto,Converter={cnv:decimalToVisibilityConverter}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
private ObservableCollection<MyType> _DetallePresupuesto;
public ObservableCollection<MyType> DetallePresupuesto
{
get {
if (_DocumentoPresupuesto == null)
return new ObservableCollection<MyType>();
else
return new ObservableCollection<MyType>(_DocumentoPresupuesto.Parent.MyType);
}
set { SetProperty(ref _DetallePresupuesto, value); }
}
此命令每次删除一行
public void ExecuteDelete(object p)
{
try
{
bool borro = false;
MyType det = (MyType)p;
MyType item = DetallePresupuesto.Where(x => x.NumIdTransaccion == det.NumIdTransaccion).FirstOrDefault();
if (item != null)
{
DetallePresupuesto.RemoveAt(DetallePresupuesto.IndexOf(item));
db.SetEntityState(det, EntityState.Deleted);
db.SaveEntity(det);
}
}
catch (Exception e)
{
ReportarInconsistencia(e.Message);
}
}
我的问题是当从集合ID中删除一个项目时,但它没有刷新UI。
如何强制执行UI刷新?
答案 0 :(得分:3)
您未在UI中绑定DetallePresupuesto
。你绑定到:
return new ObservableCollection<MyType>();
或
return new ObservableCollection<MyType>(_DocumentoPresupuesto.Parent.MyType);
对于要更新的UI,您需要让属性返回要删除的列表,即DetallePresupuesto
。这意味着getter应该看起来像这样。
public ObservableCollection<MyType> DetallePresupuesto
{
get {
if (_DetallePresupuesto == null)
_DetallePresupuesto = new ObservableCollection<MyType>(); //populate here
return _DetallePresupuesto;
}
}
另外,请尽量避免收藏的设置者。