如何在wpf列表框中呈现默认文本

本文关键字:默认 文本 wpf 列表 | 更新日期: 2023-09-27 18:03:37

我对wpf很陌生,所以我在一些列表框绑定方面遇到了麻烦,下面是我的场景:

我有一个ObservableCollection绑定到我的列表框。我们把这个集合命名为Templates

这是我的MessageTemplateClass类:
public class MessageTemplate{
        public virtual long Id { get; set; }
        public virtual String Name { get; set; }
        public virtual MessageTemplateType MessageTempleateType { get; set; } //some enum
        public virtual String Topic{ get; set; }
        public virtual String Body{ get; set; }
        public override string ToString()
        {
            return Name;
        }
}

我将Listbox绑定到Templates属性:

<ListBox Name="lstTemplates" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"   
                 ScrollViewer.HorizontalScrollBarVisibility="Auto" 
                 ItemsSource="{Binding Templates}" 
                 SelectedItem="{Binding Path=CurrentTemplate}"
                 DisplayMemberPath="Name">

CurrentTemplate是当前选择的模板(用户可以编辑)。有一个按钮,当点击时,它会这样做:

CurrentTemplate = new MessageTemplate();
Templates.Add( CurrentTemplate);

现在,我希望列表框显示这些模板(没有分配名称)与一些默认文本,如"未命名*"或其他。

这是我的两个问题:

1)我如何指定,如果lisbox项目的(消息模板)名称没有设置,显示一个"未命名的*"标签/文本块?

2)这是一种偏离主题,但当我编辑一个新的模板,当我分配一个名称给它,它会从列表框中消失(在列表框中的空白空间消失)。知道这是为什么吗?

任何帮助都是非常感谢的

编辑:

我希望通过xaml严格做到这一点。假设我无法控制我的MessageTemplate类

如何在wpf列表框中呈现默认文本

如果name为空,则设置默认字符串,您可以像这样声明您的属性

private string _name = "";
public string Name { 
get
{
    if(string.IsNullOrEmpty(_name))
    {
        return "Unnamed";
    }
    else
    {
        return _name;
    }
}
 set
{
    _name = value;
}
}

在绑定上尝试FallBackValue和TargetNullValue。你也可以使用IValueConverter。

更新:在这里你可以找到一个如何使用TargetNullValue的例子:http://msdn.microsoft.com/en-us/library/system.windows.data.bindingbase.targetnullvalue (v = vs.110) . aspx

如果绑定上的值为null,则可以显示默认文本。它看起来像这样:

<TextBox Text="{Binding SomeProperty, TargetNullValue=your default value}" />

FallBackValue将以类似的方式工作:http://msdn.microsoft.com/en-us/library/system.windows.data.bindingbase.fallbackvalue(v=vs.110).aspx

我提到的最后一个选项是IValueConverter:http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx