RichTextBox绑定的问题

时间:2014-04-29 08:31:07

标签: c# wpf binding richtextbox

再一次我坚持使用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。所以我想要做的是在对象正在进行时添加消息项。

如果添加了新行(消息)或用户选择了其他订单,数据绑定应显示信息。

1 个答案:

答案 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对绑定也有点奇怪。我认为你必须找到一个更好的控件提供格式化文本。