首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否以编程方式将TextBox值从V强制到VM?

是否以编程方式将TextBox值从V强制到VM?
EN

Stack Overflow用户
提问于 2012-08-29 02:42:15
回答 3查看 104关注 0票数 0

双向绑定工作得很好,但在TextBox中,当控件失去焦点时就会发生这种情况。

在我的例子中,我有一个简单的UI,有一个TextBox和Submit/Cancel按钮。

在视图上设置为默认的提交按钮。因此,用户可以在文本框中键入文本并点击"Enter“,这将调用Submit命令。这很好,但是我需要从TextBox访问值,它不在VM中,因为TextBox没有松散焦点。如何强制此绑定从我的代码更新?

代码语言:javascript
运行
复制
<TextBox
    Text="{Binding Comment, Mode=TwoWay}"
    Grid.Row="2"/>

<StackPanel
    Grid.Row="3"
    HorizontalAlignment="Right"
    Orientation="Horizontal">
    <Button 
        Padding="20,5"
        Margin="5"
        Command="{Binding CancelCommand}"
        Content="Cancel" IsCancel="True" />
    <Button 
        Padding="20,5"
        Margin="5"
        Command="{Binding SubmitCommand}"
        Content="Submit" IsDefault="True" />
</StackPanel>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-29 02:45:07

在TextBox绑定上使用UpdateSourceTrigger=PropertyChanged。

票数 2
EN

Stack Overflow用户

发布于 2012-08-29 03:01:03

UpdateSourceTrigger=PropertyChanged将使源代码在每次击键时都被更新。这是最简单的方法。如果您不想或不需要如此频繁地更新源代码,也可以通过执行以下代码来强制更新:

代码语言:javascript
运行
复制
        BindingExpression expression = TextBoxDescription.GetBindingExpression(TextBox.TextProperty);
        expression.UpdateSource();
票数 1
EN

Stack Overflow用户

发布于 2012-08-29 03:02:46

如果您不想在每次按键后更新VM,而是在按下Submit-Button之后更新VM,则可以在视图上使用BindingGroup。然后在命令处理程序中,首先调用BindingGroup.Commit,然后在VM上调用submit方法。这不能很好地与通常的VM RelayCommand一起工作,但您可以创建我称之为粘滞命令的东西,以便封装此功能。

粘滞命令是一个小组件,它通过附加的属性附加到XAML中的视图,注册命令处理程序,并配置为使用反射调用VM上的方法。如果你愿意,你可以在http://wpfglue.wordpress.com上阅读它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12165471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档