【问题标题】:Selectively/Condtionally update controls bound to same model property when property changes属性更改时选择性/有条件地更新绑定到相同模型属性的控件
【发布时间】:2012-08-09 15:36:56
【问题描述】:

下面我有两个控件模板,它们用作网格中两个不同列的单元格模板。您会注意到两列都绑定到相同的模型属性(代码和值),但使用转换器以不同方式显示这些值。两个控件模板也使用相同的样式在数据更改时“闪​​烁”单元格。

这可行,但不完全是我想要的方式。现在,当 Data.Code 或 Data.Value 发生变化时,两个列单元格都会闪烁。我想要的是如果 Data.Code == "CodeA",那么使用模板 CDisplay2 的列不应该闪烁(事实上,它不应该显示任何内容)。如果 Data.Code == "CodeB",则使用模板 CDisplay1 的单元格不应闪烁。

要实现这一点,如果我可以有条件地应用基于 Data.Code 的样式模板,那就太好了,但我不知道该怎么做。对此有什么想法吗?如何根据特定属性值有选择地将样式应用于绑定到同一模型属性的多个控件?

<Style x:Key="FlashStyle" TargetType="TextBlock" >
    <Setter Property="Visibility" Value="Collapsed"/>
    <Style.Triggers>
        <EventTrigger RoutedEvent="Binding.TargetUpdated">
            <EventTrigger.Actions>
                <BeginStoryboard>
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames RepeatBehavior="4x" Storyboard.TargetProperty="(UIElement.Visibility)">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
                            <DiscreteObjectKeyFrame KeyTime="0:0:0.4" Value="{x:Static Visibility.Collapsed}"/>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger.Actions>
        </EventTrigger>
    </Style.Triggers>
</Style>

<ControlTemplate x:Key="CDisplay1" >
    <Grid>
        <TextBlock Style="{StaticResource Flash1}" >
            <TextBlock.Text>
                <MultiBinding Converter="{StaticResource conv}"  ConverterParameter="CodeA" NotifyOnTargetUpdated="True">
                    <Binding Path="Data.Code"  />
                    <Binding Path="Data.Value"  />
                </MultiBinding>
            </TextBlock.Text>
        </TextBlock>
    </Grid>
</ControlTemplate>
<ControlTemplate x:Key="CDisplay2" >
    <Grid>
        <TextBlock Style="{StaticResource Flash1}" >
            <TextBlock.Text>
                <MultiBinding Converter="{StaticResource conv}"  ConverterParameter="CodeB" NotifyOnTargetUpdated="True">
                    <Binding Path="Data.Code"  />
                    <Binding Path="Data.Value"  />
                </MultiBinding>
            </TextBlock.Text>
        </TextBlock>
    </Grid>
</ControlTemplate>

【问题讨论】:

    标签: c# wpf silverlight xaml


    【解决方案1】:

    我使用触发器有条件地设置绑定。这样做的效果是 FlashStyle 不会对两个控件都执行,因为某些单元格不会被绑定并且转换器不会被调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      • 2013-11-02
      • 1970-01-01
      • 2021-01-31
      相关资源
      最近更新 更多