我有一個文本框,我綁定到viewmodel的字符串屬性。字符串屬性在viewmodel中更新,並通過綁定顯示文本框內的文本。WPF文本框綁定和換行
問題是,我想在字符串屬性中的一定數量的字符後插入換行符,我希望換行符顯示在文本框控件上。
我試圖附加\ r \ n的視圖模型的字符串屬性,但斷行內不會反映在文本框(我有Acceptsreturn屬性設置爲true的文本框內)
任何人可以幫助。
我有一個文本框,我綁定到viewmodel的字符串屬性。字符串屬性在viewmodel中更新,並通過綁定顯示文本框內的文本。WPF文本框綁定和換行
問題是,我想在字符串屬性中的一定數量的字符後插入換行符,我希望換行符顯示在文本框控件上。
我試圖附加\ r \ n的視圖模型的字符串屬性,但斷行內不會反映在文本框(我有Acceptsreturn屬性設置爲true的文本框內)
任何人可以幫助。
我剛剛創建了一個簡單的應用程序,它可以完成您所描述的任務,並且可以爲我工作。
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
爲Window
。最後,Button_Click()
實現如下:
private void Button_Click(object sender, RoutedEventArgs e)
{
this.model.Text = "Hello\r\nWorld";
}
(我意識到觀點實在不應該直接修改視圖模型的Text
屬性,但是這僅僅是一個快速的示例應用程序。)
這將導致TextBox
的第一行是「Hello」,第二行是「World」。
也許如果您發佈您的代碼,我們可以看到與此示例有什麼不同?
我的解決方案是使用HTML編碼的換行符( )。
Line1 Line2
貌似
Line1
Line2
從直樹
我喜歡@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");
}
}
現在你可以使用TextWriteLine,TextWrite和TextClear在MVVM。
謝謝安迪,我終於明白了這個問題。非常感謝您的支持。 – deepak 2009-07-14 12:40:34