我创建了一个具有属性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以拥有所有数据,因此,问题是,当绑定对象本身(参考)时,如何强制迫使绑定再次执行(参考)没有更改,但是里面有所改变吗?
您实际想要的是AttachedProperty
和TextBlock.Tag
属性之间的binding
,因此当Tag
更改时,请设置AttachedProperty
。但是,由于您也与Name
绑定,因此我建议使用Name
和Tag
绑定将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>