如何绑定DataTemplate

时间:2015-12-16 10:06:52

标签: c# wpf xaml

大家好,我有以下数据模板:

    <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属性)总是空的。

我确定问题与我尝试绑定参数属性的方式有关,但我无法弄清楚正确的语法。关于如何获得结果的任何想法(我不能相信这可以做到......)。

感谢您提供的任何帮助

1 个答案:

答案 0 :(得分:0)

正如您可能猜到我的想法是试图为“您无法绑定ConverterParameter”问题找到解决方法。

经过对互联网的进一步研究后,我发现了这篇文章:

Bindable Converter Parameter

来自这个ntg123的家伙。它实际上解决了我的问题,允许以某种方式使用与标准语法几乎相同的语法将ConverterParameter绑定到多个源。

它基于自定义MarkupExtension,在无法进行多重绑定的情况下非常有效。