如果我理解正确,那么您在从转换器访问格式字符串时遇到问题。我认为在模型层中有格式化字符串(与数据表示有关)并不完全是 MVVM 方式。对我来说,你应该把它放到你的视图模型中。然后你可以通过数据绑定将它作为参数传递给转换器。
这是您如何执行此操作的示例:
<TextBlock Text="{Binding Address, Converter={StaticResource AddressToShortOneLinerAddress},ConverterParameter={Binding YourFormattingString}}" TextWrapping="NoWrap" Style="{StaticResource PhoneTextSubtleStyle}"/>
注意ConverterParameter
属性。您可以将其绑定到视图模型的属性,该属性包含格式化字符串。然后您将object parameter
在Convert
通话中收到它:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
它有帮助吗?还是我完全错过了你的意思?
编辑:
好的,因为前面的例子实际上不起作用,这是另一种方法。这个想法基本上是绑定整个DataContext
,并在转换器中将其转换为您的视图模型类型,并从那里获取格式化字符串。不那么优雅,但应该工作。这是示例代码,XAML:
<TextBlock Text="{Binding Converter={StaticResource AddressToShortOneLinerAddress}, TextWrapping="NoWrap" Style="{StaticResource PhoneTextSubtleStyle}"/>
...和转换器:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var viewModel = value as MyViewModel;
if (viewModel != null)
{
string format = viewModel.FormattingString;
return ...;
}
return null;
}
请注意我是如何错过了XAMLPath
中表达式的属性。Binding
这样的语法意味着我们绑定到整个对象,而不是它的一个属性。