我正在使用一个转换器,将字符串转换为我们的时间格式,但是遇到了一些问题。转换器本身运行良好,实现方式如下:
[ValueConversion(typeof(string), typeof(SimpleTime))]
public class StringToSimpleTimeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
// convert from string to SimpleTime and return it
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
// convert value from SimpleTime to string and return it
}
}
XAML使用转换器时,需要在usercontrol.resources中像这样包含转换器本身:
<converter:StringToSimpleTimeConverter x:Key="stringToSimpleTimeConverter"/>
如果遇到该属性(我在后台使用wpf工具包中的datagrid),则会使用simpletime的数据模板进行编辑:
<DataTemplate x:Key="SimpleTimeEditingTemplate">
<TextBox Text="{Binding, Converter={StaticResource stringToSimpleTimeConverter}, Mode=TwoWay}"/>
</DataTemplate>
我遇到的问题是,如果是双向转换器(我需要在两个方向上使用),则绑定中需要指定路径,但我想设置的属性已经是当前的DataContext - 那我应该指定什么路径呢?
我能想到的唯一解决方法是,在SimpleTime中引入一个虚拟属性,它只获取当前的SimpleTime或设置它。
public class SimpleTime
{
...
public SimpleTime Clone
{
get { return new SimpleTime(_amount, _format); }
set { this._amount = value._amount; this._format = value._format; }
}
}
并通过绑定到该内容进行操作
<TextBox Text="{Binding Clone, Converter={StaticResource stringToSimpleTimeConverter}, Mode=TwoWay}"/>
这个方法虽然可以正常工作,但并不是一个合适的解决方案,特别是如果我需要多次转换...
非常感谢您的帮助!祝好,manni