【问题标题】:I want to know about WPF binding Textbox line down我想了解 WPF 绑定文本框行
【发布时间】:2018-06-01 12:12:21
【问题描述】:

我正在尝试在 xaml 中使用 WPF 创建一个记录器系统。我做了以下投标代码:

<TextBlock x:Name="textBlock"
           HorizontalAlignment="Left"
           Margin="10,194,0,0"
           TextWrapping="Wrap"
           VerticalAlignment="Top"
           Height="51"
           Width="366"
           Text="{Binding LogView,
                          Source={StaticResource logViewModel},
                          UpdateSourceTrigger=PropertyChanged}" />

绑定文本工作正常,但在文本框中,字符串仅在文本框中的第一行更新。该字符串应在下一行更新, 而且我不能像下面的代码那样使用附加字符串,因为我将解析字符(例如 D、E、I)然后更改字符串颜色:

mLogViewStr+=value;

请帮帮我...

日志视图模型:

 namespace StretcherUI.Device
    {
        class LogViewModel : ILogHandler,
                             INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;
            static string savePath = @"d:\log.txt";
            const int logListSize = 500;
            public LogViewModel()
            {
                Logger.sLogHandler = this;
            }


            private string mLogViewStr;
            public string LogView
            {
                get { return mLogViewStr; }
                set
                {
                    mLogViewStr = value;               
                }
            }

            protected void OnPropertyChanged(string propertyName)
            {
                PropertyChanged?.Invoke(
                                    this,
                                    new PropertyChangedEventArgs(propertyName));
            }

            public void onLog(string logFmt, params object[] arg)
            {
                LogView = string.Format(logFmt, arg);
            }
        }
    }

【问题讨论】:

  • 它不更新,或者在第一行之后不显示所有行?
  • 你好,它更新但只在第一行..我想在第一行更新文本,然后在第二行更新下一个文本..第三行..
  • 向我们展示您的 ViewModel。如果没有更多代码可以理解,这很难理解。
  • 您将 textbox.Text 绑定到 logView,因此它显示了模型中的所有内容。检查 logView 是否真的是您认为的那样。
  • 私有字符串 mLogViewStr;公共字符串 LogView { 获取 { 返回 mLogViewStr; } 设置 { mLogViewStr = 值; } }

标签: c# wpf binding textbox


【解决方案1】:

你应该在你的公共设置器中调用 OnPropertyChanged,这样 WPF 视图可以理解它有待更新

  public string LogView
            {
                get { return mLogViewStr; }
                set
                {
                    mLogViewStr = value;
                    OnPropertyChanged("LogView");
                }
            }

【讨论】:

    【解决方案2】:

    仅当您通知 View 时,才能从模型绑定到视图。因此,为了通知视图,模型应该实现 INotifyPropertyChanged (你做了)并在每次绑定属性更改时调用 PropertyChanged (你错过了)。 只需像这样修改您的代码:

    public string LogView {
      get {
        return mLogViewStr;
      }
      set {
        mLogViewStr = value;
        OnPropertyChanged(nameof(LogView))             
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-23
      • 2010-11-10
      • 2012-11-24
      • 2015-10-16
      • 2011-03-29
      • 2012-05-09
      • 2010-12-20
      • 2018-01-24
      相关资源
      最近更新 更多