如何在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类
如果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