2009-07-14 46 views
5

Tôi có một hộp văn bản mà tôi gắn kết với thuộc tính chuỗi của viewmodel. Thuộc tính chuỗi được cập nhật trong viewmodel và nó hiển thị văn bản trong hộp văn bản thông qua ràng buộc.WPF ràng buộc hộp văn bản và ngắt dòng

Vấn đề là tôi muốn chèn ngắt dòng sau một số ký tự nhất định trong thuộc tính chuỗi và tôi muốn ngắt dòng được hiển thị trên điều khiển hộp văn bản.

tôi đã cố gắng phụ thêm \ r \ n bên trong sở hữu chuỗi trong viewmodel nhưng ngắt dòng không được phản ánh trên các textbox (i có Acceptsreturn bộ tài sản cho đúng bên trong hộp)

ai có thể giúp.

Trả lời

3

Tôi vừa tạo một ứng dụng đơn giản thực hiện những gì bạn mô tả và nó hoạt động cho tôi.

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)); 
     } 
    } 
} 

Một thể hiện của ViewModel được thiết lập như là DataContext cho Window. Cuối cùng, việc thực hiện Button_Click() là:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    this.model.Text = "Hello\r\nWorld"; 
} 

(Tôi nhận ra rằng quan điểm nên không thực sự thay đổi sở hữu Text của ViewModel trực tiếp, nhưng đây chỉ là một ứng dụng mẫu nhanh chóng.)

Điều này dẫn đến từ "Xin chào" trên dòng đầu tiên của số TextBox và "Thế giới" nằm trên dòng thứ hai.

Có thể nếu bạn đăng mã, chúng tôi có thể thấy điều gì khác với mẫu này?

+0

Cảm ơn Andy, tôi đã tìm ra vấn đề ở phần cuối của mình. Cảm ơn bạn rất nhiều vì đã ủng hộ bạn. – deepak

6

Giải pháp cho tôi là sử dụng nguồn cấp dữ liệu dòng mã HTML ( ).

Line1&#10;Line2 

Hình như

Line1 
Line2 

Từ Naoki

0

Tôi thích cách tiếp cận @Andy, nó là hoàn hảo cho văn bản nhỏ không có văn bản lớn và cuộn.

Xem Mẫu

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"); 
    } 
} 

Bây giờ bạn có thể sử dụng TextWriteLine, TextWrite và TextClear trong MVVM của bạn.

Các vấn đề liên quan