我有一个自定义的TextBox,打算将其包含在另一个UserControl中,但是为它设置Binding时,它只是不绑定。
为了简化起见,我简化了代码。
我的自定义文本框:
<UserControl DataContext="{Binding RelativeSource={RelativeSource Self}}">
<TextBox Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}" />
</UserControl>
partial class CustomTextBox : UserControl
{
public string Text
{
get { return (string)GetValue(TextProperty); }
set
{
SetValue(TextProperty, value);
}
}
public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
"Text",
typeof(string),
typeof(CustomTextBox),
new PropertyMetadata(String.Empty));
}
此绑定按预期方式工作。在另一个UserControl或Window中使用CustomTextBox
时,我可以按预期访问属性。
以下代码块描述了使用CustomTextBox
的UserControl和具有我要将Text
绑定到的属性的对应ViewModel。
<UserControl>
<UserControl.DataContext>
<vm:MyViewModel />
</UserControl.DataContext>
<local:CustomTextBox Text="{Binding FooBar, UpdateSourceTrigger=PropertyChanged}" />
</UserControl>
public class MyViewModel : INotifyPropertyChanged
{
private string _fooBar;
public string FooBar
{
get { return _fooBar = (_fooBar ?? ""); }
set
{
_fooBar = value; OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
当我想将Text
属性绑定到另一个UserControl中的ViewModel时,恰好发生了我的问题,但是它不起作用。在这种情况下,我尝试将Text
属性绑定到FooBar
类的MyViewModel
属性,但是对Text
属性的更改不会反映在{{1 }}属性,反之亦然。但是,当我将鼠标悬停在XAML视图中的绑定上时,它显示了属性的类型,因此我无法确切地看到这里出了什么问题。
我最好的猜测是,它与访问同一属性的两个绑定有关。
答案 0 :(得分:0)
修改DP注册以包含FrameworkPropertyMetadataOptions.BindsTwoWayByDefault
选项
public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
"Text",
typeof(string),
typeof(CustomTextBox),
new FrameworkPropertyMetadata(String.Empty, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));