Ala*_*ain 1 wpf xaml converter .net-4.0
大多数转换器不带参数或一个固定参数,并且易于绑定到:
<local:MyConverter x:Key="MyConverterInstance" />
<TextBox Text="{Binding Path=MyTime,
Converter={StaticResource MyConverterInstance},
ConverterParameter='yyyy/MM/dd'}" />
Run Code Online (Sandbox Code Playgroud)
但是,如果我希望该格式是用户可以更改的动态属性,我不能做这样的事情,对吧?:
<TextBox Text="{Binding Path=MyTime,
Converter={StaticResource MyConverterInstance},
ConverterParameter={Binding Path=UserFormat}}" />
Run Code Online (Sandbox Code Playgroud)
所以我唯一的选择是在MyConverter上定义DependencyProperty以进行绑定.但我的转换器定义是StaticResource.我不能去
<local:MyConverter x:Key="MyConverterInstance"
Format="{Binding Path=UserFormat}"/>
Run Code Online (Sandbox Code Playgroud)
因为StaticResources上没有DataContext.我怎么设置它?
您无法绑定到转换器参数,但您可以使用Multibinding.例如:http://www.switchonthecode.com/tutorials/wpf-tutorial-using-multibindings 或如何简单地将其绑定到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();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2591 次 |
最近记录: |