C# MVVM-是否有一种方法可以获取和设置文本框';不使用数据绑定的文本?

C# MVVM-是否有一种方法可以获取和设置文本框';不使用数据绑定的文本?,c#,wpf,mvvm,textbox,C#,Wpf,Mvvm,Textbox,我需要能够获取和设置文本框的文本,但我不希望文本框文本中的每一个更改都会更新viewmodel中的字符串。在我看来,将字符串绑定到textbox的text属性的效率几乎与在textbox的textchanged事件中更新字符串的效率一样低,还是我错了?我认为这实际上取决于您定义的效率。对我来说,能够在XAML级别声明双向绑定比处理文本更改事件、将自己附加到视图模型的属性更改并来回复制内容要高效得多 我为什么要这么做 除此之外,默认绑定行为是聚焦丢失…绑定到TextBox.Text的默认行为是Lo

我需要能够获取和设置文本框的文本,但我不希望文本框文本中的每一个更改都会更新viewmodel中的字符串。在我看来,将字符串绑定到textbox的text属性的效率几乎与在textbox的textchanged事件中更新字符串的效率一样低,还是我错了?

我认为这实际上取决于您定义的效率。对我来说,能够在XAML级别声明双向绑定比处理文本更改事件、将自己附加到视图模型的属性更改并来回复制内容要高效得多

我为什么要这么做

除此之外,默认绑定行为是聚焦丢失…

绑定到
TextBox.Text
的默认行为是
LostFocus
,这意味着只有当文本框保留时,viewmodel中的字符串才会更新

当然,如果你这样做

<TextBox Text="{Binding Path=ItemName, UpdateSourceTrigger=PropertyChanged}" />

然后,文本框中的内容每次更改时,字符串都会更新。因此,是的,这将“几乎和在textbox的textchanged事件上更新字符串一样低效”


不过,我并没有看到现实世界中的问题:即使你有一个打字速度非常快的用户,更新内存中的字符串也不是一个需要花费大量时间的操作。事实上,通过文本框本身处理用户输入(显示键入的字符、到达文本框末尾时向左滚动文本等)也需要相当多的处理,因此,我不认为更新字符串会造成如此不合理的额外负担。

如果您决定在没有数据绑定的情况下访问文本属性,您可以始终为文本框指定一个x:名称,并在代码中访问它。但是,如果您试图实现MVVM,那么沿着这条路走下去会让事情变得相当糟糕(您基本上是在复制数据绑定系统在代码中提供的一些“控制器”逻辑。)这取决于文本框的用途。如果它是搜索的过滤器,那么更新每个字符可能会触发对DB的搜索。