将扩展文本框中的依赖项属性绑定到UserControl

时间:2015-01-26 15:57:30

标签: c# wpf

我扩展了文本框的功能,下面是带有附加属性RegularExpressionEnabled的类的一部分:

public class AlphaNumericTextBox : TextBox
{
    #region DependencyProperties

    public static readonly DependencyProperty RegularExpressionEnabledProperty =
                                                    DependencyProperty.Register("RegularExpressionEnabled", typeof(bool), typeof(AlphaNumericTextBox),
                                                    new UIPropertyMetadata(false));

    public bool RegularExpressionEnabled
    {
        get { return (bool)GetValue(RegularExpressionEnabledProperty); }
        set { SetValue(RegularExpressionEnabledProperty, value); Console.WriteLine("RegularExpressionEnabled:" + (bool)value); }
    }

}

然后将此类合并到UserControl中 XAML:

<UserControl x:Class="Libs_ViewLevel.Controls.FilterItemControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:Libs_ViewLevel" 
             xmlns:ctrls="clr-namespace:Libs_ViewLevel.Controls"
             x:Name="UserControl">
    <Grid x:Name="LayoutRoot" Height="Auto" >
        <ctrls:AlphaNumericTextBox x:Name="AlphaNumericTbx"
                                   Grid.ColumnSpan="2"
                                   Text="{Binding AlphaNumericValue}"
                                   RegularExpressionEnabled="{Binding RegExpressionEnabled}" />
    </Grid>
</UserControl>

代码隐藏:

public partial class FilterItemControl : UserControl
{
    public FilterItemControl()
    {
        InitializeComponent();
        this.DataContext = this;
    }

    public bool RegExpressionEnabled
    {
        get { return (bool)GetValue(RegExpressionEnabledProperty); }
        set { SetValue(RegExpressionEnabledProperty, value); Console.WriteLine("RegExpressionEnabled:" + (bool)value); }
    }

    public static readonly DependencyProperty RegExpressionEnabledProperty =
                                                    DependencyProperty.Register("RegExpressionEnabled", typeof(bool), typeof(FilterItemControl),
                                                    new UIPropertyMetadata(false));

我已将UserControl放在一个Window中,并在此窗口的代码隐藏中放置此语句:txtbox.RegExpressionEnabled = true;

在RegularExpressionEnabled和RegExpressionEnabled中,您可以看到我放置了一个Console.Write()。

RegExpressionEnabled打印到输出屏幕,但它没有到达第二个,RegularExpressionEnabled。

我对AlphaNumericTextBox RegularExpressionEnabled="{Binding RegExpressionEnabled}"的绑定有问题,有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

在FilterItemControl背后的代码中,RegExpressionEnabled属性应该是标准属性,因为这是新文本框绑定到的属性。您不需要在FilterItemControl代码中使用依赖项属性,因为您已经在新文本框中使用了它。

现在不是设置txtbox.RegExpressionEnabled = true(实际应该是txtbox.RegularExpressionEnabled = true),而是将RegExpressionEnabled属性设置为true,文本框将绑定到此。

您还需要在RegExpressionEnabled属性的setter中引发PropertyChanged事件以触发数据绑定。