29

是否有任何简单的方法可以绑定到 DataTemplate 中的 ToString() 方法?我希望 TextBlock 的 Text 属性默认使用 ToString() 作为其 Text 属性,但这不会发生。所以任何简单的方法来做到这一点:

<DataTemplate x:Key="myTemplate">
    <TextBlock Text="{Binding ToString()}"/>
<DataTemplate>
4

5 回答 5

59

您可以使用Text="{Binding}". 该ToString()方法被隐式调用。

于 2012-11-29T16:23:57.037 回答
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();
    }
}
于 2012-11-29T15:27:45.227 回答
4

不幸的是,您不能将控件绑定到方法,但您可以绕过这样做:

public string GetText()
{
    return "I am happy";
}

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

现在在 XAML 中:

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

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

于 2012-11-29T16:42:42.617 回答
1

将特定 ToString() 方法的字符串属性添加到要绑定的对象会更有意义。

于 2012-11-29T16:12:54.960 回答
0

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

于 2012-11-29T15:26:07.340 回答