DependencyProperty未触发

时间:2012-02-09 14:24:59

标签: wpf dependency-properties

我在我的usercontrol中定义了这样的属性:

 public bool IsSelected 
    {
        get { return (bool)GetValue(IsSelectedProperty); }
        set
        {
            SetValue(IsSelectedProperty, value);
            StackPanelDetails.Visibility = value ? Visibility.Visible : Visibility.Collapsed;
        }
    }

    public static readonly DependencyProperty IsSelectedProperty =
        DependencyProperty.Register("IsSelected", typeof (bool), typeof (ucMyControl));

但是当我在xaml中设置它的属性时,它想要触发它(set不被调用)。

 <DataTemplate><local:ucTopicItem IsSelected="False" /></DataTemplate>

可能是什么问题?

2 个答案:

答案 0 :(得分:10)

在XAML中设置DP时,WPF不会调用DependencyProperty的setter。 WPF将直接设置DependencyProperty。

请参阅MSDN XAML Loading and Dependency Properties,了解未调用setter的原因。

答案 1 :(得分:5)

您应该直接在依赖项属性中使用属性更改处理程序。这样,您可以确保在XAML中设置时调用它:

public static readonly DependencyProperty IsSelectedProperty =
    DependencyProperty.Register("IsSelected", typeof(bool), typeof(ucMyControl), new PropertyMetadata(false, OnIsSelectedChanged));

private static void OnIsSelectedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    // Implement change logic
}