【发布时间】:2011-09-19 15:49:11
【问题描述】:
我创建了一个包含依赖属性“Text”的自定义 TextBox 控件(但不是从 TextBox 派生的)。
我已经添加了 this 的一个实例,并使用 TwoWay 绑定将它绑定到我的视图模型上的一个属性。
如何在我的自定义 TextBox 控件中更新 Text 属性,以便将更改传播到视图模型上的属性?
如果我在自定义控件上设置“文本”属性,它将替换绑定,使视图模型上的属性为空。
我原以为这很简单,但我不知道该怎么做(标准的 TextBox 控件必须这样做!)
干杯
编辑:
自定义控件:
public class SampleCustomControl : CustomControl
{
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(SampleCustomControl), new PropertyMetadata(null));
public void Update()
{
// This replaces my binding, I want it to pass the new value
// through to the "SomeProperty" two way binding.
Text = "some value";
}
}
用法:
<Controls:SampleCustomControl Text="{Binding SomeProperty, Mode=TwoWay}" />
【问题讨论】:
-
所有 DependencyProperty 更新都是通过幕后的 SetValue 来触发绑定上的更改事件。您通常会为您的 DP 添加一个 set/get 对(仅供您自己使用),它也调用 GetValue/SetValue。您能否展示您的 XAML 和代码以进行控制和使用,因为它应该是微不足道的。设置你的文本属性不应该改变绑定。
-
我正在设置一个 Text 属性,它本身会调用 SetValue 方法,但这正在替换绑定 - 我将添加一些代码来演示它
标签: silverlight silverlight-4.0 mvvm