DependencyProperty未触发

问题描述 投票:6回答:2

我在用户控件中定义了这样的属性:

 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>

可能是什么问题?

wpf dependency-properties
2个回答
12
投票

在XAML中设置属性时,将不会调用依赖项属性的设置器。 WPF而是直接调用SetValue方法。

请参阅MSDN XAML Loading and Dependency Properties以了解为何不调用设置器的说明。

您必须使用属性元数据注册PropertyChangedCallback


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
}
© www.soinside.com 2019 - 2024. All rights reserved.