【问题标题】:Get the text in a Textblock or Textbox in MVVM在 MVVM 中获取文本块或文本框中的文本
【发布时间】:2014-02-28 06:00:33
【问题描述】:

我目前在使用 mvvm 将项目添加到列表时遇到问题,我已经成功地能够使用这个简单的方法在列表中添加项目:

    private DelegateCommand _addItemCommand;
            public ICommand AddItemCommand
            {
                get
                {
                    if (_addItemCommand == null)
                    {
                        _addItemCommand = new DelegateCommand(AddItem);
                    }
                    return _addItemCommand;
                }
            }

    void AddItem()
            {

           DessertData.Add(new CakeDataSample {Samplename="Black Forest" ,ImagePath="Assets/Black-Forest.jpg"});
            }

现在我想要实现的是获取文本块或文本框的文本并将它们添加到列表中。我想这样做:

DessertData.Add(new CakeDataSample {Samplename=txtCakename.text ,ImagePath=myImageSource}); //or something likethat

我将如何获得该文本?有什么要补充的吗?

【问题讨论】:

  • 在您的 VM 中有一个 string 属性,并以双向方式将其绑定到 Textblock 或 TextBox.. 在添加时使用该属性..
  • 怎么样?如果问一些愚蠢的问题,我很抱歉,我还在学习 mvvm 的基础知识,你能给我一个示例吗?

标签: c# wpf xaml mvvm


【解决方案1】:

按照下面的代码,

private string text;
public string Text
{
     get
     {
          return text;
     }
     set
     {
          text = value;
          OnPropertyChanged("Text");
     }
}

在你的虚拟机中使用它...我相信你已经实现了INotifyPropertyChanged

<TextBox x:Name="txtCakename" Text="{Binding Text, Mode=TwoWay}"/>

这会将文本绑定到 txtCakename 到 Text 属性..

在你的 AddItem 方法中,

DessertData.Add(new CakeDataSample {Samplename=this.Text,ImagePath=myImageSource});

【讨论】:

  • 谢谢!它对我有很大帮助!!!还有一个小问题,我实现ViewModel而不是INotifyPropertyChanged是否也适用?
  • 嗯,这段代码是正确的,但我在设置初始文本时遇到了麻烦。每当导航页面时(如 WinForms 中的表单加载),我在文本块中设置不同的文本,然后在获取该文本并将它们添加到列表之前必须有一个初始文本,但随后我看到空白文本块。我该如何解决这个问题?
猜你喜欢
  • 2012-05-15
  • 1970-01-01
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-10
  • 2012-11-24
  • 2022-12-04
相关资源
最近更新 更多