C# WPF文本框绑定和换行符

C# WPF文本框绑定和换行符,c#,wpf,binding,textbox,C#,Wpf,Binding,Textbox,我有一个绑定到viewmodel的string属性的文本框。字符串属性在viewmodel中更新,并通过绑定在文本框中显示文本 问题是我想在string属性中的一定数量的字符之后插入换行符,并且我想换行符显示在textbox控件上 我尝试在viewmodel中的字符串属性内追加\r\n,但换行符没有反映在文本框上(我已在文本框内将Acceptsreturn属性设置为true) 有人能帮我吗。我刚刚创建了一个简单的应用程序,它符合你的描述,对我来说很有效 XAML: ViewModel的实例被设置

我有一个绑定到viewmodel的string属性的文本框。字符串属性在viewmodel中更新,并通过绑定在文本框中显示文本

问题是我想在string属性中的一定数量的字符之后插入换行符,并且我想换行符显示在textbox控件上

我尝试在viewmodel中的字符串属性内追加\r\n,但换行符没有反映在文本框上(我已在文本框内将Acceptsreturn属性设置为true)


有人能帮我吗。

我刚刚创建了一个简单的应用程序,它符合你的描述,对我来说很有效

XAML:

ViewModel
的实例被设置为
窗口的
DataContext
。最后,
按钮单击()的实现是:

private void Button_Click(object sender, RoutedEventArgs e)
{
    this.model.Text = "Hello\r\nWorld";
}
(我意识到视图不应该直接修改ViewModel的
Text
属性,但这只是一个快速示例应用。)

这将导致
文本框的第一行出现“Hello”,第二行出现“World”


也许如果您发布代码,我们可以看到与此示例有什么不同?

我的解决方案是使用HTML编码的换行符( )

看起来像

Line1
Line2

从Naoki开始

我喜欢@Andy方法,它非常适合小文本而不是大文本和可滚动文本

视图模型

class ViewModel :INotifyPropertyChanged
{
    private StringBuilder _Text = new StringBuilder();
    public string Text
    {
        get { return _Text.ToString(); }
        set
        {
            _Text = new StringBuilder( value);
            OnPropertyChanged("Text");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string propName)
    {
        var eh = this.PropertyChanged;
        if(null != eh)
        {
            eh(this,new PropertyChangedEventArgs(propName));
        }
    }
    private void TextWriteLine(string text,params object[] args)
    {
        _Text.AppendLine(string.Format(text,args));
        OnPropertyChanged("Text");
    }

    private void TextWrite(string text,params object[] args)
    {
        _Text.AppendFormat(text,args);
        OnPropertyChanged("Text");
    }

    private void TextClear()
    {
        _Text.Clear();
        OnPropertyChanged("Text");
    }
}

现在,您可以在MVVM中使用TextWriteLine、TextWrite和TextClear。

谢谢Andy,我在最后解决了这个问题。非常感谢您的支持。
Line1
Line2
Line1
Line2
class ViewModel :INotifyPropertyChanged
{
    private StringBuilder _Text = new StringBuilder();
    public string Text
    {
        get { return _Text.ToString(); }
        set
        {
            _Text = new StringBuilder( value);
            OnPropertyChanged("Text");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string propName)
    {
        var eh = this.PropertyChanged;
        if(null != eh)
        {
            eh(this,new PropertyChangedEventArgs(propName));
        }
    }
    private void TextWriteLine(string text,params object[] args)
    {
        _Text.AppendLine(string.Format(text,args));
        OnPropertyChanged("Text");
    }

    private void TextWrite(string text,params object[] args)
    {
        _Text.AppendFormat(text,args);
        OnPropertyChanged("Text");
    }

    private void TextClear()
    {
        _Text.Clear();
        OnPropertyChanged("Text");
    }
}