在访问依赖项属性设置器之前调用用户控件上的TextChanged事件

时间:2012-05-23 13:56:24

标签: c# .net wpf user-controls dependency-properties

在我使用自定义用户控件之前,我使用的是标准textxbox,其text属性绑定到列表框中所选项目的属性。绑定还使用了验证规则。设置此属性后,在xaml中触发了文本更改事件,一切正常。

现在我已将其更改为使用包含文本框的用户控件。我向我的用户控件添加了一个依赖项属性,该属性绑定到文本框的text属性。现在,在验证发生之前更改文本时会触发事件。只有在我的对话框中选中了绑定到同一项的另一个属性的复选框时才会进行验证。除了列表框中的初始选择之外,我的模型视图中set方法的断点不再被破坏,但是值正在更新,因为我在单击文本框后看到效果。在单击复选框之前,验证显示的错误消息不会显示。

我窗口中用户控件的XAML:

<my:BoundTextBox x:Name="spacingValueBox" TextBoxBase.TextChanged="spacingValueBox_TextChanged">
    <my:BoundTextBox.Text>
       <Binding Path="SelectedItem.Property" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay">                                       
           <Binding.ValidationRules>
              <validators:ValidationRule ErrorMessage="Invalid"/>
           </Binding.ValidationRules>
      </Binding>
   </my:BoundTextBox.Text>

在XAML中绑定到我的用户控件的Text属性:

<UserControl x:Class="ButtonTextBox" ...
         ... Name="control">
<TextBox Text="{Binding Text, ElementName=control}"/>

依赖属性:

public static readonly DependencyProperty TextProperty =
TextBox.TextProperty.AddOwner(typeof(BoundTextBox));

public string Text
{
  get { return (string)GetValue(TextProperty); }
  set { SetValue(TextProperty, value); }
}

1 个答案:

答案 0 :(得分:0)

解决方案实际上非常简单,我只需将UpdateSourceTrigger值设置为PropertyChanged

<TextBox Text="{Binding Text, ElementName=control, UpdateSourceTrigger=PropertyChanged}"/>