Привязка данных WPF / Silverlight к свойству интерфейса (со скрытой реализацией) - PullRequest
1 голос
/ 22 мая 2010

У меня есть следующий (C #) код

namespace A
{
  public interface IX { bool Prop { get; set; } }
  class X : IX { public bool Prop { ... } } // hidden implementation of IX
}

namespace B
{
  ..
  A.IX x = ...;
  object.DataContext = x;
  object.SetBinding(SomeDependencyProperty, new Binding("Prop"));
  ..
}

Итак, у меня есть скрытая реализация интерфейса со свойством «Prop», и мне нужно привязать это свойство в коде.

Моя проблема в том, что привязка не работает, если я не сделаю класс X общедоступным.

Есть ли способ обойти эту проблему?

Ответы [ 2 ]

1 голос
/ 22 мая 2010

Я полагаю, что вы делаете это в Silverlight, потому что привязка к непубличным участникам там невозможна.Однако это в WPF.

Так что для Silverlight вы должны сделать свой класс общедоступным.

0 голосов
/ 31 мая 2013

Существует очень веская причина сделать классы, реализующие открытые интерфейсы, внутренними.Это обеспечивает программирование на основе интерфейса..Net это все об интерфейсах, а не классах.Практическое правило. Никогда не открывайте конкретный, не примитивный тип, когда можно предоставить интерфейс.

Существует синтаксис привязки, позволяющий компилятору XAML привести объект к интерфейсу.Это упоминалось в другом посте:

{Binding Path=(mynamespacealias:IMyInterface.MyValue)}
...