大家好,我有以下数据模板:
<DataTemplate DataType="Integer">
<StackPanel>
<xctk:IntegerUpDown Minimum="{Binding XPath=Min}"
Maximum="{Binding XPath=Max}"
Increment="{Binding XPath=Inc}"
ClipValueToMinMax="True"
AllowSpin="True">
<xctk:IntegerUpDown.Resources>
<converters:Parameter x:Key="IntegerParameter"
CurrentDevice="{Binding ElementName=Dock, Path=DataContext.CurrentDevice}"
ParameterName="{Binding RelativeSource={RelativeSource TemplatedParent}, XPath=@RegisterName}"
ParameterType="Integer">
</converters:Parameter>
</xctk:IntegerUpDown.Resources>
<xctk:IntegerUpDown.Value>
<Binding XPath="@Name"
Converter="{StaticResource IntegerDataConverter}"
ConverterParameter="{StaticResource IntegerParameter}"
Mode="TwoWay"/>
</xctk:IntegerUpDown.Value>
</xctk:IntegerUpDown>
</StackPanel>
</DataTemplate>
此数据模板的目的是调用转换器来设置从外部设备读取它的IntegerUpDown控件的值。
有关如何联系设备的详细信息存储在转换器中:参数类(从依赖项对象派生)。双向意味着应该使用相同的机制与ConvertBack将值写入设备。
MultiBinding不是一个选项,因为ConvertBack方法不能用于&#34;创建&#34;来自单个整数值的所有参数。
此模板几乎按预期工作:我为应用数据模板的每个项目获取了一个Parameter类的实例。
不幸的是,CurrentDevice的值(应绑定到名为&#34的Dock的DataContext属性CurrentDevice; Dock&#34;)和ParameterName(应该绑定到应用DataTemplate的Xml节点的Xml属性)总是空的。
我确定问题与我尝试绑定参数属性的方式有关,但我无法弄清楚正确的语法。关于如何获得结果的任何想法(我不能相信这可以做到......)。
感谢您提供的任何帮助
答案 0 :(得分:0)
正如您可能猜到我的想法是试图为“您无法绑定ConverterParameter”问题找到解决方法。
经过对互联网的进一步研究后,我发现了这篇文章:
来自这个ntg123的家伙。它实际上解决了我的问题,允许以某种方式使用与标准语法几乎相同的语法将ConverterParameter绑定到多个源。
它基于自定义MarkupExtension,在无法进行多重绑定的情况下非常有效。