2009-07-14 2 views
5

У меня есть текстовое поле, которое я привязываю к строковой структуре viewmodel. Свойство string обновляется в пределах viewmodel и отображает текст в текстовом поле посредством привязки.WPF привязка текстового поля и разрывы строк

Проблема в том, что я хочу вставить разрыв строки после определенного количества символов в строковом свойстве, и я хочу, чтобы разрыв строки отображался над элементом управления текстовым полем.

Я попытался добавления \ г \ п внутри свойства строки в ViewModel, но разрыв строки не отражается через текстовое поле (я имею Acceptsreturn набор свойств истина внутри текстового поля)

Может кто-нибудь помочь.

ответ

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> 

ViewModel:

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 свойство ViewModel напрямую, но это просто быстрый пример приложения.)

Это приводит к слово «Привет» в первой строке TextBox, а «Мир» - на второй строке.

Возможно, если вы разместите свой код, мы сможем увидеть, что отличается от этого образца?

+0

Спасибо Энди, я понял проблему на моем конце. Большое спасибо за вашу поддержку. – deepak

6

Решение для меня заключалось в использовании кодированных строк в формате HTML ( ).

Line1&#10;Line2 

Похоже

Line1 
Line2 

От Наоки

0

Мне нравится @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.