我有自定义控件。这能够与其他几个控件做一些事情。我希望它有一个元素NotifyControl
,我可以绑定一些其他控件,如NotifyControl="{Binding ElementName=controlA}"
。这很好,但我想写下n
控件。因此,可能是元素值中的列表或多次注意元素。像
<MyControl NotifyControl="{Binding ElementName=a}" NotifiyControl="{Binding ElementName=b}" />
或
<MyControl NotifyControl="{Binding ElementName=a}, {Binding ElementName=b}" />
哪一种可能,怎么做?我对阵列类型没有运气,也许我上面的符号是错误的。
修改:
我现在有
<MyControl>
<MyControl.NotifyControls>
<NotifyControlWrapper View="{Binding ElementName=details}" Test="entry one" />
<NotifyControlWrapper View="{Binding ElementName=gauge}" Test="e2" />
</MyControl.NotifyControls>
</MyControl>
<OtherControl x:Name="details" />
NotifyControls
是一个DependencyProperty并且填充了两个条目,因此这部分工作正常。 NotifyControlWrapper
的来源只是一个派生自DependencyObject
的类,其中包含两个依赖项属性View
(类型INotifyControl
)和Test
(类型String
)。
正如我所说,我的列表中有两个NotifyControlWrapper
条目。但是,虽然Test
包含给定的字符串,但View
为null
。为什么这样或如何调试?
答案 0 :(得分:2)
你的问题中没有一个是可能的。您不能两次添加相同的属性,因此#1不起作用。你不能添加两个绑定,所以#2不起作用。我会将属性NotifyControls添加为List类型。 NotifyControl仍然可以作为单独的项目使用,或者添加到NotifyControls中的控件列表中。您可以在Xaml中添加项目:
<MyControl.NotifyControls>
<ControlWrapper Control="{Binding ElementName=a}"/>
<ControlWrapper Control="{Binding ElementName=b}"/>
</MyControl.NotifyControls>
ControlWrapper只有一个成员属性Control,因此您可以指定绑定。
答案 1 :(得分:0)
如果N是固定的,您可以使用MultiBinding(带转换器):
<MyControl>
<MyControl.NotifyControl>
<MultiBinding Converter="...">
<Binding ElementName="controlA" />
<Binding ElementName="controlB" />
<Binding ElementName="controlC" />
<Binding ElementName="controlD" />
<Binding ElementName="controlE" />
...
</MultiBinding>
</MyControl.NotifyControl>
</MyControl>
如果N改变,则选项是添加ObservableCollection&lt;&gt;在你的类中添加/删除控件,然后绑定到它(再次使用转换器)
<MyControl NotifyControl="{Binding ElementName=ParentElement, Path=MyObservableCollection, Converter=...}" />