再一次我坚持使用WPF中的数据绑定。这次是使用RichTextBox。
我的程序应该将他的实际状态写入RichTextBox。 为此,每个对象都有一个变量,在该变量上写入对其执行的实际操作。 (应该导致每个对象的过程历史记录)
所以我有一个名为" Message"保存文本(一行)和文本格式的地方。
现在我想将List绑定到RichTextBox,尊重存储的格式。 单向绑定就足够了。
但我没有找到任何关于如何将行列表绑定到RichTextBox并添加一些格式的内容。
这是我用来存储"行":
的课程 [Serializable]
class Message
{
[field: NonSerialized]
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
private bool bold = false;
public bool Bold
{
get
{
return bold;
}
set
{
bold = value;
OnPropertyChanged("Bold");
}
}
public bool italic { get; set; }
public bool Italic
{
get
{
return italic;
}
set
{
italic = value;
OnPropertyChanged("Italic");
}
}
public bool landingInFront { get; set; }
public bool LandingInFront
{
get
{
return landingInFront;
}
set
{
landingInFront = value;
OnPropertyChanged("LandingInFront");
}
}
public string messageLine { get; set; }
public string MessageLine
{
get
{
return messageLine;
}
set
{
messageLine = value;
OnPropertyChanged("MessageLine");
}
}
Color textColor = Color.Black;
public Color TextColor
{
get
{
return textColor;
}
set
{
textColor = value;
OnPropertyChanged("TextColor");
}
}
}
我很高兴有一个我自己班级的例子。不必完整。只是我可以看到它的方向以及我如何将格式化到文本/进行绑定。
问候
SyLuS
附录:我想做的更详细的信息
我有一个应该自动处理订单的程序。 ui概述了用户可以查看实际订单的情况。 导致订单必须通过不同的操作,我想看看哪些操作已经执行,是否成功执行,等等。
如果在ui中选择了订单,则屏幕上会显示详细信息。 我们的想法是获取订单对象并将执行/执行状态存储在对象本身中。这将导致概述和操作历史。
输出应该如下:
Order 1234
Step 1 - Check Informations
Done...
Step 2 - Providing the neseccary items
Item 1 - OK
Item 2 - OK
Item 3 - Missing
Step 3 - Ordering missing items
...
等等。
我想在不同的步骤中实现输出。我在每个订单对象中都有一个List。所以我想要做的是在对象正在进行时添加消息项。
如果添加了新行(消息)或用户选择了其他订单,数据绑定应显示信息。
答案 0 :(得分:1)
您应该使用转换器将Message
属性转换为格式化文本。
例如
public class MessageConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
var message = (Message) value;
if(message.Italic)
{
var it = new Italic();
it.Inlines.Add(new Run{Text = message.MessageLine});
it.Inlines.Add(new LineBreak());
return it;
}
else if(...)
{
...
}
return ...;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
RichTextBox
对绑定也有点奇怪。我认为你必须找到一个更好的控件提供格式化文本。