【问题标题】:My Dependency Property is only binding one way我的依赖属性只绑定一种方式
【发布时间】:2014-06-04 08:58:31
【问题描述】:

我是 WPF 的新手,我正在做一些我觉得很简单的事情。我制作了一个包含文本框的 UserControl,并且我想将 TextBox.Text 属性绑定到我的用户控件 Value 的依赖项属性。文本框正确显示 Value,如果您更改 Value 的值,文本框也会相应更新。但是,如果我更改文本框中的值,值不会更改以反映它。即使我手动将绑定模式设置为双向,它仍然只能绑定一种。我将 Value 设置为依赖属性,所以这不应该解决问题吗?

这是我的 XAML(为了便于阅读,我去掉了其他控件):

<UserControl x:Class="WindowsApp.FormBox"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
             xmlns:local="clr-namespace:WindowsApp">
    <Grid DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=local:FormBox}}">
        <TextBox x:Name="TextForm" Text="{Binding Path=Value, Mode=TwoWay}" />
    </Grid>
</UserControl>

这是 c#,Visual Studio 为我自动生成了它,所以它可能有什么不对的地方

public String Value
{
    get { return (String)GetValue(ValueProperty); }
    set 
    {
        SetValue(ValueProperty, value);
    }
}
public static readonly DependencyProperty ValueProperty =
    DependencyProperty.Register("Value", typeof(String), typeof(FormBox));

在代码的其他部分,我只是通过 Value="{Binding Whatever}" 在 XAML 中分配值 任何建议或帮助将不胜感激。谢谢。

【问题讨论】:

  • 当您说“如果您更改文本框中的值,则值不会更改以反映它”,您的意思是您输入了一个新值还是通过强制输入并完全提交了该值那个文本框失去焦点?
  • 另外,输出日志有错误吗?

标签: c# wpf xaml data-binding


【解决方案1】:

您需要将 Text 绑定的 UpdateSourceTrigger 设置为 PropertyChanged。 TextBox 的默认值为 LostFocus。如果这是窗口中唯一的控件,则没有其他任何东西可以接收焦点,因此 LostFocus 事件永远不会触发,并且绑定永远不会更新源。

<TextBox x:Name="TextForm" Text="{Binding Path=Value, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />

【讨论】:

  • 哦,哇,真快,非常感谢!有用!我刚刚假设 propertychanged 会默认为默认值,我没想到文本框会改变它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-22
  • 2012-11-08
  • 2012-08-01
  • 1970-01-01
  • 2017-12-24
相关资源
最近更新 更多