我有一个文本框,我绑定到viewmodel的字符串属性。字符串属性在viewmodel中更新,它通过绑定在文本框中显示文本。
问题是我想在字符串属性中的一定数量的字符之后插入换行符,并且我希望换行符显示在文本框控件上。
我尝试在viewmodel中的字符串属性中追加\ r \ n但是换行符没有反映在文本框上(我在文本框中将Acceptsreturn属性设置为true)
任何人都可以提供帮助。
答案 0 :(得分:6)
我的解决方案是使用HTML编码的换行符( )。
Line1 Line2
看起来像
Line1
Line2
来自Naoki
答案 1 :(得分:3)
我刚创建了一个简单的应用程序,可以完成您所描述的内容,并且对我有用。
XAML:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<TextBox Grid.Row="0" AcceptsReturn="True" Height="50"
Text="{Binding Path=Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<Button Grid.Row="1" Click="Button_Click">Button</Button>
</Grid>
</Window>
视图模型:
class ViewModel : INotifyPropertyChanged
{
private string text = string.Empty;
public string Text
{
get { return this.text; }
set
{
this.text = value;
this.OnPropertyChanged("Text");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propName)
{
var eh = this.PropertyChanged;
if(null != eh)
{
eh(this, new PropertyChangedEventArgs(propName));
}
}
}
ViewModel
的实例设置为DataContext
的{{1}}。最后,Window
的实施是:
Button_Click()
(我意识到视图不应该直接修改ViewModel的private void Button_Click(object sender, RoutedEventArgs e)
{
this.model.Text = "Hello\r\nWorld";
}
属性,但这只是一个快速的示例应用程序。)
这会在Text
的第一行产生“Hello”字样,而“World”位于第二行。
也许如果您发布代码,我们可以看到与此示例有何不同之处?
答案 2 :(得分:0)
我喜欢@Andy Approach,它非常适合没有大文本和可滚动文本的小文本。
查看模型
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。