我正在尝试将自定义控件的依赖项属性绑定到其ViewModel的属性。
自定义控件如下所示:
public partial class MyCustomControl : Canvas
{
//Dependency Property
public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(MyCustomControl));
private VisualCollection controls;
private TextBox textBox;
public string Text
{
get { return textBox.Text; }
set
{
SetValue(TextProperty, value);
textBox.Text = value;
}
}
//Constructor
public MyCustomControl ()
{
controls = new VisualCollection(this);
InitializeComponent();
textBox = new TextBox();
textBox.ToolTip = "Start typing a value.";
controls.Add(textBox);
//Bind the property
this.SetBinding(TextProperty, new Binding("Text") {Mode = BindingMode.TwoWay, Source = DataContext});
}
}
View Model看起来像:
-------
public class MyCustomControlViewModel: ObservableObject
{
private string _text;
public string Text
{
get { return _text; }
set { _text = value; RaisePropertyChanged("Text");}
}
}
----------
“Text”属性的此绑定由于某种原因无效。
我想要做的是,在实际实现中,我希望在更新基础ViewModel的Text属性时更新MyCustom Control的text属性。
非常感谢任何有关此事的帮助。
答案 0 :(得分:1)
经过一番研究后,我终于找到了我的代码问题。我通过创建一个静态事件处理程序来实现此代码,该处理程序实际上将新属性值设置为依赖项属性的基础公共成员。 Dependency属性声明如下:
//Dependency Property
public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(MyCustomControl), new PropertyMetadata(null, OnTextChanged));
然后定义设置属性的静态方法如:
private static void OnTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
MyCustomControl myCustomControl = (MyCustomControl)d;
myCustomControl.Text = (string) e.NewValue;
}
这是我唯一缺少的东西。
干杯
答案 1 :(得分:0)
只需绑定到依赖项属性
<MyCustomControl Text="{Binding Path=Text}" />
答案 2 :(得分:0)
您应该将您的成员TextBox绑定到TextProperty。我很确定你的Text属性中xaml中的绑定会覆盖你在构造函数中创建的那个。