Wpf 如何使用可绑定转换器参数制作转换器?
大多数转换器不带任何参数或一个固定参数,并且易于绑定到:Wpf 如何使用可绑定转换器参数制作转换器?,wpf,xaml,.net-4.0,converter,Wpf,Xaml,.net 4.0,Converter,大多数转换器不带任何参数或一个固定参数,并且易于绑定到: <local:MyConverter x:Key="MyConverterInstance" /> <TextBox Text="{Binding Path=MyTime, Converter={StaticResource MyConverterInstance}, ConverterParameter='yyyy/MM
<local:MyConverter x:Key="MyConverterInstance" />
<TextBox Text="{Binding Path=MyTime,
Converter={StaticResource MyConverterInstance},
ConverterParameter='yyyy/MM/dd'}" />
但是,如果我想让这种格式成为用户可以更改的动态属性,我不能这样做,对吗
<TextBox Text="{Binding Path=MyTime,
Converter={StaticResource MyConverterInstance},
ConverterParameter={Binding Path=UserFormat}}" />
因此,我唯一的选择是在MyConverter上定义DependencyProperty进行绑定。但我的转换器定义是静态资源。我不能去
<local:MyConverter x:Key="MyConverterInstance"
Format="{Binding Path=UserFormat}"/>
因为StaticResources上没有DataContext。如何设置此选项?您不能绑定到converterparameter,但可以使用多重绑定。 例如: 或 (阿兰)所以,只要把这个链接的答案翻译成与这个问题相匹配的东西:
<TextBlock>
<TextBlock.Resources>
<local:MyConverter x:Key="MyConverterInstance" />
</TextBlock.Resources>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource converter}">
<Binding Path="MyTime" />
<Binding Path="UserFormat" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
public class MyConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
DateTime time = (DateTime)values[0];
string format = values[1].ToString();
return time.ToString(format);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
公共类MyConverter:IMultiValueConverter
{
公共对象转换(对象[]值,类型targetType,对象参数,
System.Globalization.culture(信息文化)
{
DateTime时间=(DateTime)值[0];
字符串格式=值[1]。ToString();
返回时间.ToString(格式);
}
公共对象[]转换回(对象值,类型[]目标类型,对象参数,
System.Globalization.culture(信息文化)
{
抛出新的NotImplementedException();
}
}
不能绑定到converterparameter,但可以使用多重绑定。
例如:
或
(阿兰)所以,只要把这个链接的答案翻译成与这个问题相匹配的东西:
<TextBlock>
<TextBlock.Resources>
<local:MyConverter x:Key="MyConverterInstance" />
</TextBlock.Resources>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource converter}">
<Binding Path="MyTime" />
<Binding Path="UserFormat" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
public class MyConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
DateTime time = (DateTime)values[0];
string format = values[1].ToString();
return time.ToString(format);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
公共类MyConverter:IMultiValueConverter
{
公共对象转换(对象[]值,类型targetType,对象参数,
System.Globalization.culture(信息文化)
{
DateTime时间=(DateTime)值[0];
字符串格式=值[1]。ToString();
返回时间.ToString(格式);
}
公共对象[]转换回(对象值,类型[]目标类型,对象参数,
System.Globalization.culture(信息文化)
{
抛出新的NotImplementedException();
}
}
好的,那么如果我们有上面的XAML,这相当于您的链接问题解决方案,我如何将其与我的转换器相适应-其中“MyTime”应该进入“Value”参数,而“UserFormat”应该进入“parameter”参数。记住converter convert方法的签名是public object convert(对象值,类型targetType,对象参数,CultureInfo-culture)
。如果您从IMultiValueConverter继承,您将拥有一个值数组。好的,那么如果我们有上面的XAML,它相当于您的链接问题解决方案,我如何使它适合我的转换器-其中“MyTime”应该进入“Value”参数,而“UserFormat”应该进入“parameter”参数。记住converter convert方法的签名是public object convert(对象值,类型targetType,对象参数,CultureInfo-culture)
。如果从IMultiValueConverter继承,则将有一个值数组。