我是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中分配值
任何建议或帮助将不胜感激。谢谢。
答案 0 :(得分:1)
您需要将Text绑定的UpdateSourceTrigger设置为PropertyChanged。 TextBox的默认值是LostFocus。如果这是窗口中唯一的控件,则没有任何其他可以获得焦点的内容,因此LostFocus事件永远不会触发,绑定永远不会更新源。
<TextBox x:Name="TextForm" Text="{Binding Path=Value, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />