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