Sadique KT Ответов: 2

Почему свойство dependencyproperty всегда равно нулю ?


Свойство DependencyProperty всегда показывает значение null.

Даже я пройти статической или переменной связывания из основных элементов управления (UCProfitGraphs)

Упомянутый usercontrol(UCCurrentMonth) DependencyProperty имеет значение null.

Что я уже пробовал:

<UserControl x:Class="DashBoard.UCProfitGraphs"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
описание:х="http://schemas.microsoft.com/winfx/2006/xaml"
описание:МС="http://schemas.openxmlformats.org/markup-compatibility/2006"
описание:д="http://schemas.microsoft.com/expression/blend/2008"
xmlns:screen="clr-пространство имен:панель мониторинга.ProfitGraphs"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<сетка>
&ЛТ;решетки.columndefinitions&ГТ;
<columndefinition>
<columndefinition>

&ЛТ;решетки.rowdefinitions и GT;
<rowdefinition>
<rowdefinition>

<экран:UCCurrentMonth SelectedProductProfitChart="ProductA" >

&ЛТ;экран:сетки UCCurrentMonth.Строка="1" SelectedProductProfitChart="ProductB" /&ГТ;



 public partial class UCCurrentMonth: UserControl, INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        public static readonly DependencyProperty SelectedProductProfitChartProperty = DependencyProperty.Register
           (
           "SelectedProductProfitChart",
           typeof(string),
           typeof(UCCurrentMonth),
           null
           //,
           //new PropertyMetadata("")
           );

        public string SelectedProductProfitChart
        {
            get { return (string)GetValue(SelectedProductProfitChartProperty); }
            set { SetValue(SelectedProductProfitChartProperty, value); }
        }

       
        public UCCurrentMonth()
        {
            InitializeComponent();
            LoadData();
            this.DataContext = this;
        }

        private void LoadData()
        {

//SelectedProductProfitChart is always null
            if (SelectedProductProfitChart== "ProductA")
            {
//                GetProductA Info
            }
            else if (SelectedProductProfitChart== "ProductB")
            {
//                GetProductB Info
            }
        }
    }

2 Ответов

Рейтинг:
1

Dirk Bahle

Aehm, давайте зададим вопрос наоборот, почему datacontext UCCurrentMonth не должен быть нулевым? Я не вижу никаких полезных Привязок в коде, который вы публикуете, и это выглядит довольно странно, что вы реализуете

NotifyPropertyChanged
в UserControl(?)

Ты же это знаешь SelectedProductProfitChart="ProductA" это просто установка свойства в строку (если это свойство принимает строку), в то время как привязка выглядит немного по-другому, не так ли?

В конце концов, невозможно сказать, в чем ваша проблема, потому что фрагменты, которые вы опубликовали, являются полными (отсутствует хотя бы модель представления?)...


Sadique KT

Я не использую MVVM pattern...in этот проект и его пример кода..

Рейтинг:
1

Richard Deeming

Ты звонишь LoadData слишком рано. Значение свойства не будет установлено до тех пор, пока после конструктор выполнен.

Вместо этого используйте обратный вызов изменения свойства:

public partial class UCCurrentMonth: UserControl
{
    public static readonly DependencyProperty SelectedProductProfitChartProperty = DependencyProperty.Register(
        "SelectedProductProfitChart",
        typeof(string),
        typeof(UCCurrentMonth),
        new PropertyMetadata("", OnSelectedProductProfitChartChanged));
    
    public string SelectedProductProfitChart
    {
        get { return (string)GetValue(SelectedProductProfitChartProperty); }
        set { SetValue(SelectedProductProfitChartProperty, value); }
    }
    
    private static void OnSelectedProductProfitChartChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
    {
        var control = source as UCCurrentMonth;
        if (control != null) control.OnSelectedProductProfitChartChanged(e);
    }
    
    protected virtual void OnSelectedProductProfitChartChanged(DependencyPropertyChangedEventArgs e)
    {
        LoadData();
    }
    
    public UCCurrentMonth()
    {
        InitializeComponent();
        DataContext = this;
    }
    
    private void LoadData()
    {
        string chart = SelectedProductProfitChart;
        if (chart == "ProductA")
        {
            // GetProductA Info
        }
        else if (chart == "ProductB")
        {
            // GetProductB Info
        }
    }
}