我正在尝试创建一个可重复使用的用户控件(用于数据输入),其中有两个文本框,它们通过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是原始的常规代码。 ...
不确定您要如何在一个控件中绑定多个转换器。如果我没看错,您想构建一个控件,在该控件中,当用户输入特定值时,您需要以不同的单位显示它。在这种情况下,您可以创建一个转换器参数为“ m”,“ cm”,“ inch”等的单个转换器,并以此为基础返回结果。然后,在这种情况下,您将拥有4,5个控件,并且每个控件将具有相同的转换器绑定但具有不同的转换器值。如果不清楚,您需要进一步的指导,请告知。
多值绑定
[首先,不要将TextBox
彼此绑定(就像在问题开始时的原始代码一样),而是将每个TextBox
绑定到相同的支持属性,该属性在UserControl
中,是Value
。