在可重复使用的用户控件中绑定转换器参数

问题描述 投票:0回答:1

我正在尝试创建一个可重复使用的用户控件(用于数据输入),其中有两个文本框,它们通过IValueConvertor链接到每个文本框。

以下XAML是原始的常规代码。这就是我试图在用户控件中重现的内容。

<WrapPanel>
    <TextBlock Text="Length of Fence"/>
    <TextBox Name="Metric" Width="50" Text="{Binding Path=LengthFence, Mode=TwoWay}"/>
    <TextBlock Text="Meters"/>
    <TextBox Text="{Binding ElementName=Metric, Path=Text, Converter={StaticResource MetersToInches}, StringFormat=N8}"/>
    <TextBlock Text="Inches"/>
</WrapPanel>

[IValueConvertor(在MainWindow.xaml中)的背后代码是

    public class MetersToInches : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value.ToString() == "")
                return 0.0;
            try
            {
                double meters = System.Convert.ToDouble(value);
                var result = meters * 39.3701;
                return result;
            }
            catch
            {
                // Catch errors when users type invalid expressions.
                return 0.0;
            }

        }

        public object ConvertBack(object value, Type targettype, object parameter, CultureInfo culture)
        {
            if (value.ToString() == "")
                return 0.0;
            try
            {
                double inches = System.Convert.ToDouble(value);
                var result = inches * 0.0254;
                return result;
            }
            catch
            {
                // Catch errors when users type invalid expressions.
                return 0.0;
            }
        }

    }

这是此XAML的样子:“原始输入字段,没有任何可重复使用的用户控件”]

现在我制作了一个可重用的UserControl,它具有三个用于标签字符串的依赖项属性Label,用于在ViewModel内绑定属性的Value和用于显示输入单位的字符串属性Units

<UserControl ...
             x:Name="parent">
    <StackPanel DataContext="{Binding ElementName=parent}">
        <TextBlock Text="{Binding Path=Label}"/>
        <TextBox Text="{Binding Path=Value}"/>
        <TextBlock Text="{Binding Path=Units}"/>
    </StackPanel>

但是,此可重用控件只能处理输入的第一个TextBox。我不知道如何在第二个IValueConvertor中绑定TextBox。我需要这样做,因为我想绑定其他转换器,例如米到英尺,公斤到磅,等等。

我已经读到ConvertorParameter无法绑定,因为它不是依赖项属性,而且我不确定是否可以使用多重绑定,主要是因为我不知道如何正确使用它Binding ConverterParameter

如果您能向我展示如何执行此操作,或将我定向到StackOverflow或解决此问题的其他位置上的适当链接,我将非常感谢。或者,如果有更好的方法可以做到这一点。

非常感谢。

我正在尝试创建一个可重复使用的用户控件(用于数据输入),其中有两个文本框,并且它们通过IValueConvertor链接到每个文本框。以下XAML是原始的常规代码。 ...

c# wpf binding ivalueconverter
1个回答
0
投票

不确定您要如何在一个控件中绑定多个转换器。如果我没看错,您想构建一个控件,在该控件中,当用户输入特定值时,您需要以不同的单位显示它。在这种情况下,您可以创建一个转换器参数为“ m”,“ cm”,“ inch”等的单个转换器,并以此为基础返回结果。然后,在这种情况下,您将拥有4,5个控件,并且每个控件将具有相同的转换器绑定但具有不同的转换器值。如果不清楚,您需要进一步的指导,请告知。

多值绑定


0
投票

[首先,不要将TextBox彼此绑定(就像在问题开始时的原始代码一样),而是将每个TextBox绑定到相同的支持属性,该属性在UserControl中,是Value

© www.soinside.com 2019 - 2024. All rights reserved.