0

我有一个 UserControl,它有一个 ObservableCollection 依赖属性和一个属性更改回调。回调重建 TreeView 控件中的节点。这一切都很好,但我希望能够拥有设计数据。不幸的是,除非我将控件嵌入到另一个控件中,否则设计器不会调用构造函数、回调或默认值函数调用。在这种情况下有没有办法加载默认数据?

下面是我的控制背后的代码

    public partial class ScheduleResourcesSummaryTreeView : UserControl
{
    public ObservableCollection<PerformanceProjection> SelectedPerformances 
    {
        get { return (ObservableCollection<PerformanceProjection>)GetValue(SelectedPerformancesProperty); }
        set { SetValue(SelectedPerformancesProperty, value); }
    }

    // Using a DependencyProperty as the backing store for MyProperty.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty SelectedPerformancesProperty =
        DependencyProperty.Register("SelectedPerformances", 
            typeof(ObservableCollection<PerformanceProjection>), 
            typeof(ScheduleResourcesSummaryTreeView), 
            new FrameworkPropertyMetadata(
                new ObservableCollection<PerformanceProjection>(),
                FrameworkPropertyMetadataOptions.AffectsRender, SelectedPerformancesChanged)
            );


    private static void SelectedPerformancesChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        if (!(d is ScheduleResourcesSummaryTreeView resourcesTree)) return;
        resourcesTree.ResourcesTree.Items.Clear();
        var sessions = e.NewValue as ObservableCollection<PerformanceProjection> ?? new ObservableCollection<PerformanceProjection>();

        if (sessions.Count == 0) return;
        var projections = sessions.SelectMany(x => x.ResourceBookingProjections);

        TreeNode<ResourceBookingProjection> resourceBookingTreeRoot = new RvtSummaryTree(new ObservableCollection<ResourceBookingProjection>(projections), "");
        foreach (var treeNode in resourceBookingTreeRoot.Children)
        {
            resourcesTree.ResourcesTree.Items.Add((TreeNode<ResourceBookingProjection>)treeNode);
        }
    }

    private static ObservableCollection<PerformanceProjection> DefaultCollection()
    {
        var prop = DesignerProperties.IsInDesignModeProperty;
        var designMode = (bool) DependencyPropertyDescriptor
            .FromProperty(prop, typeof(FrameworkElement))
            .Metadata.DefaultValue;
        if (!designMode)
            return new ObservableCollection<PerformanceProjection>();

        var designdata = new PerformanceProjectionsViewModelDesignData();

        return designdata.SelectedPerformances;

    }

    public ScheduleResourcesSummaryTreeView()
    {
        InitializeComponent();
    }
}
4

0 回答 0