绑定 DataTemplate 中的 ToString() 方法

32

有没有一种简单的方法来绑定DataTemplate中的ToString()方法?我原本期望TextBlock的Text属性默认使用ToString()方法,但这并没有发生。那么,有没有简单的方法可以实现:

<DataTemplate x:Key="myTemplate">
    <TextBlock Text="{Binding ToString()}"/>
<DataTemplate>
5个回答

67
你可以使用Text = "{Binding}"ToString()方法会自动调用。

当绑定到枚举并且您想要显示 Enum.ToString() 时,这也非常有效。 - saluce
你如何向 ToString() 方法传递参数?(例如,格式化一个 TimeSpan - Pac0
1
@Pac0 检查StringFormat参数 - amnezjak
也适用于 Text="{x:Bind}" - Felix

7
你可以使用转换器。像这样:

你可以使用一个转换器。就像这样:

public class PropertyValueStringConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value.ToString();
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

这个对我有用,稍加修改。返回value != null ? value.ToString() : string.Empty; - Jgraham

5
很遗憾,您不能将控件绑定到方法,但是您可以通过以下方式绕过此限制:
public string GetText()
{
    return "I am happy";
}

public string MyText
{
    get { return GetText(); }
}

现在在XAML中:

<DataTemplate x:Key="myTemplate">
    <TextBlock Text="{Binding MyText}"/>
<DataTemplate>

请注意,MyText属性必须在窗口的上下文中。


1

更加合理的做法是在你所绑定的对象中添加一个字符串属性,专门用于该ToString()方法。


0

WPF不支持直接绑定到方法,但是您可以使用自定义的IValueConverter、ObjectDataProvider或其他任何方法,如此处所述。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接