所以,我有一个带有TextBlock的DataGrid,它显示网格中两个文本框的聚合值。我通过使用值转换器绑定来完成此操作。这适用于负载,但我需要它在更改其聚合的其他实体的值时进行更新。以下是我的一些代码:
这是我的ViewModel中的PagedCollectionView,它绑定到View。
private PagedCollectionView _grievances;
public PagedCollectionView Grievances
{
get
{
if (_grievances == null)
{
_grievances = new PagedCollectionView(Context.lict_grievances);
_grievances.SortDescriptions.Add(new SortDescription("grievance_type_id", ListSortDirection.Ascending));
}
return _grievances;
}
}
这是我视图中的DataGrid:
<sdk:DataGrid x:Name="grdGrievances" AutoGenerateColumns="False" ItemsSource="{Binding Path=Grievances}" HorizontalContentAlignment="Center">
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn Header="Total # of Outcomes">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource GrievanceOutcomeSum}}" Margin="15,0,0,0"></TextBlock>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn Header="Resolved">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=outcome_resolved, Mode=TwoWay}"
TextChanged="ResolvedTextBox_TextChanged" HorizontalAlignment="Center"></TextBox>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn Header="Pending">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=outcome_pending, Mode=TwoWay}"></TextBox>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
以下是聚合文本块的值转换器:
public class GrievancesAggregateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
lict_grievance entity = (lict_grievance)value;
short i = 0;
if (entity != null)
{
if (entity.outcome_resolved != null)
i += (short)entity.outcome_resolved;
if (entity.outcome_pending != null)
i += (short)entity.outcome_pending;
}
return i;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
因此,在更改其他2个文本框中的值时,我需要它来刷新文本块中的聚合值。我怎么能做到这一点?我现在不知所措,浏览网页我找不到任何解决方案。
非常感谢, 埃文
答案 0 :(得分:1)
为什么不将TextBlock(结果总数)绑定到将触发PropertyChanged的属性。然后从ResolvedTextBox_TextChanged事件中设置该值。
尝试这样的事情:
<StackPanel Orientation="Vertical">
<i:Interaction.Triggers>
<ei:PropertyChangedTrigger Binding="{Binding FirstTextBox}">
<ei:ChangePropertyAction TargetObject="{Binding ElementName=textBlock}"
PropertyName="Text"
Value="{Binding Converter={StaticResource TestConverter}}" />
</ei:PropertyChangedTrigger>
<ei:PropertyChangedTrigger Binding="{Binding SecondTextBox}">
<ei:ChangePropertyAction TargetObject="{Binding ElementName=textBlock}"
PropertyName="Text"
Value="{Binding Converter={StaticResource TestConverter}}" />
</ei:PropertyChangedTrigger>
</i:Interaction.Triggers>
<TextBlock x:Name="textBlock" />
<TextBox x:Name="firstTextBox"
Text="{Binding FirstTextBox, Mode=TwoWay}" />
<TextBox x:Name="secondTextBox"
Text="{Binding SecondTextBox, Mode=TwoWay}" />
</StackPanel>
答案 1 :(得分:1)
“MultiBinding是一个WPF功能 允许您绑定单个属性 对于许多来源,与 源值由a组合 价值转换器。这是一个功能 Silverlight中缺少的“ (行情)
这应该可以解决您的问题。最好的问候!
答案 2 :(得分:0)
尝试调用OnApplyTemplate
例如。 grid.OnApplyTemplate()