Привязка данных к DependencyObject в UserControl - PullRequest
1 голос
/ 19 октября 2011

У меня есть UserControl, который выглядит следующим образом:

Сетка DeveloperExpress, привязанная к коллекции ObservableCollection с именем Data:

 public ObservableCollection<SummaryData> Data { get; set; }

Метка с содержимым, связанным с делами, который является первым элементом сбора данных:

<Label FontStyle="Italic" Margin="2" Content="{Binding ElementName=CaseControlUC, Path=Cases.Exposed, TargetNullValue=IAmNull, Mode=OneWay}" />

где:

        public SummaryData Cases { get; set; }
    private void LoadExampleDataIntoSummaryGrid()
    {
        Cases = new SummaryData() { Caption = "Cases", Exposed = "A", Unexposed = "B" };
        Data.Add(Cases);
        Data.Add(new SummaryData() { Caption = "Controls", Exposed = "C", Unexposed = "D" });
    }

И, код для SummaryData:

public class SummaryData : DependencyObject
    {
        public string Caption { get; set; }


        public static readonly DependencyProperty ExposedProperty = DependencyProperty.Register("ExposedValue",
                                                                                                             typeof(string),
                                                                                                             typeof(SummaryData),
                                                                                                             new UIPropertyMetadata(null));

        public string Exposed
        {
            get
            {
                return (string)GetValue(ExposedProperty);
            }
            set
            {
                SetValue(ExposedProperty, value);
            }
        }



        public static readonly DependencyProperty UnexposedProperty = DependencyProperty.Register("UnexposedValue",
                                                                                                             typeof(string),
                                                                                                             typeof(SummaryData),
                                                                                                             new UIPropertyMetadata(null));


        public string Unexposed
        {
            get
            {
                return (string)GetValue(UnexposedProperty);
            }
            set
            {
                SetValue(UnexposedProperty, value);
            }
        }

        public string Total
        {
            get
            {
                int exposed;
                int unexposed;
                if (Int32.TryParse(Exposed, out exposed) && Int32.TryParse(Unexposed, out unexposed))
                {
                    return (exposed + unexposed).ToString();
                }
                return String.Format("{0} + {1}", Exposed, Unexposed);
            }
        }
    }

Обратите внимание, что "Exposed" и "Unexposed" оба являются DependencyProperties для объекта DependencyObject.

Моя проблема в том, что когда я использую Grid для обновления объекта Cases (и я знаю, что он действительно обновляется с помощью отладчика), изменение не отражается в метке. Я проверил, и окно вывода не показывает ошибок привязки данных. Кроме того, если я вернусь к тому, чтобы Exposed был обычным свойством, начальное значение читается очень хорошо (хотя обновления не отображаются, ofc.)

Я также пытался вставить конвертер в привязку данных (просто конвертер NOP, который возвращает все, что ему дано), и он действительно никогда не вызывается ...

Есть какие-нибудь чаевые? :)

1 Ответ

1 голос
/ 19 октября 2011

В объявлении свойства зависимости Exposed вы неправильно указали имя свойства, "ExposedValue" вместо "Exposed".

...