WPF影响数据指标的顺序



我创建了一个具有属性ChangedCallback函数的附件,该函数对文本块有一些格式。但是要执行格式,需要标签属性。标签本身绑定到多个verterter的输出。

但我的问题是,在标签绑定到多键点输出之前,要执行fnamePropertchangedCallback。因此,标签仍然为空,当触发fnamePropertyChangedCallback时。

有什么方法可以影响属性约束的顺序?我需要在绑定finlineProperty之前绑定标签。

public static readonly DependencyProperty FInlinePropertyProperty =
    DependencyProperty.RegisterAttached("FInlineProperty", typeof(string), typeof(MainWindow),
      new PropertyMetadata(null, FNamePropertyChangedCallback));

<TextBlock local:MainWindow.FInlineProperty="{Binding Name}" TextWrapping="WrapWithOverflow">
  <TextBlock.Tag>
  <MultiBinding Converter="{StaticResource TupleConverter}">
      <Binding />
      <Binding ElementName="Window"/>
    </MultiBinding>
  </TextBlock.Tag>
</TextBlock>

btw:有人知道如何以长形式写local:MainWindow.FInlineProperty="{Binding Name}?我尝试了<TextBlock.local:MainWindow.FInlinse>...</TextBlock.local:MainWindow.FInlinse>,但是编译器抱怨它。


更新25.Feb.2017:

我做了您的建议,并将所有内容都绑在我所附的财产上。

<TextBlock TextWrapping="WrapWithOverflow" >
<local:MainWindow.FInlineProperty>
  <MultiBinding Converter="{StaticResource GroupConverter}">
    <Binding  />
    <Binding ElementName="Window" Path="MySetup" />
  </MultiBinding>    
</local:MainWindow.FInlineProperty>
</TextBlock>

问题是,它是创建ListBoxItem的第一次工作。但是从MySetup更新属性不会重新触发fnamePropertyChangedCallback。

  MySetup.ColorString = "green";  // this does not retrigger the callback
  MySetup = MySetup.Copy();       // this does retrigger the callback

因此,当前仅分配MySetup一个自身的新副本(更改参考)触发回调函数。

那是原因,为什么我明确绑定了名称属性。

mysetup.colorsstring如果我明确地绑定到它,但是我需要绑定到mySetup以拥有所有数据,因此,问题是,当绑定对象本身(参考)时,如何强制迫使绑定再次执行(参考)没有更改,但是里面有所改变吗?

您实际想要的是AttachedPropertyTextBlock.Tag属性之间的binding,因此当Tag更改时,请设置AttachedProperty。但是,由于您也与Name绑定,因此我建议使用NameTag绑定将MultiBinding用于AP,因此完全不依赖Tag

在设置附件属性之前,请尝试设置Tag属性。这意味着您还应该使用元素语法设置附件的属性:

<TextBlock TextWrapping="WrapWithOverflow">
    <TextBlock.Tag>
        <MultiBinding Converter="{StaticResource TupleConverter}">
            <Binding />
            <Binding ElementName="Window"/>
        </MultiBinding>
    </TextBlock.Tag>
    <local:MainWindow.FInlineProperty>
        <Binding Path="Name" />
    </local:MainWindow.FInlineProperty>
</TextBlock>

最新更新