是否有一种简单的方法可以将字符串转换或格式化为WPF数据绑定的一部分?
假设我想创建一个基于string标记的WPF超链接元素。
<Hyperlink NavigateUri="{Binding Tag}">
<Run Text="{Binding Tag}" />
</Hyperlink>但是,我需要首先为NavigateUri属性转换标记,使其成为真正的超链接或PackUri。
例如,如果我的标签是“民俗分类”,我希望创建一个字符串,如:http://www.example.com/tags/tagview?tag=folksonomy
实现这一目标的最佳方法是什么?XAML中有字符串操作函数吗?我要写转换器吗?我是否只需要构建一个完整的单独的ViewModel类来进行一些字符串格式化?
更新:超链接元素似乎发生了一些奇怪的事情。我可以获得“回答”中建议的StringFormat语法,用于普通TextBlock的Text属性,而不是超级链接的NavigateUri属性。
正如一个答案所指出的,这很可能是因为NavigateUri属性正式接受Uri,而不是字符串。显然,需要一个自定义转换器或ViewModel属性。
发布于 2010-08-26 20:38:19
您可以使用绑定的字符串格式功能:
<Hyperlink NavigateUri="{Binding Tag, StringFormat=http://www.example.com/tags/tagview?tag={0}}">
<Run Text="{Binding Tag}" />
</Hyperlink>发布于 2010-08-26 20:51:30
就像肯特说的,假设你在.NET 3.5 SP1上,你可以使用字符串格式(string格式化是作为SP1的一部分添加的)。这里的好例子:http://blogs.msdn.com/b/llobo/archive/2008/05/19/wpf-3-5-sp1-feature-stringformat.aspx
如果您不在.NET 3.5 SP1上,或者字符串格式方法变得过于混乱,您会想要一个IValueConverter http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx
发布于 2010-10-07 10:22:42
对于其他人偶然发现这条寻求解决方案的线程,我发现Foovanadil的建议IValueConverter对我很有用。
<TextBlock>
<Hyperlink Name="lnkGoogle" NavigateUri="{Binding Path=Alert.Query,Converter={View:UriConverter},ConverterParameter=google}" RequestNavigate="Hyperlink_RequestNavigate">
Find news on Google
</Hyperlink>
</TextBlock>在我的代码背后使用转换器类:
public class UriConverter : MarkupExtension, IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string address = string.Empty;
switch ((string)parameter)
{
case "google":
address = "http://www.google.co.uk/news?q=" + value;
break;
}
Uri path = new Uri(@address);
return path;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new System.NotImplementedException();
}
public override object ProvideValue(System.IServiceProvider serviceProvider)
{
return this;
}
}https://stackoverflow.com/questions/3579127
复制相似问题