我的依赖属性只能以一种方式绑定

时间:2014-06-04 00:53:35

标签: c# wpf xaml data-binding

我是WPF的新手,我做的事情我觉得非常简单。我创建了一个包含文本框的UserControl,我想将TextBox.Text属性绑定到我的usercontrol的依赖项属性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中分配值 任何建议或帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

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

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