Свойства зависимостей с явными интерфейсами - PullRequest
3 голосов
/ 24 декабря 2008

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

Я подошел к стене. Я реализую представление с использованием шаблона проектирования MVVM, и мне нужно обновлять свойство TextBlocks Text каждый раз, когда обновляется свойство модели представления (VM). Для этого я бы определил свойство VM как свойство зависимости и привязал к нему свойство TextBlocks Text в представлении.

Теперь свойство MV находится в моем интерфейсе и (в соответствии с нашими стандартами разработки) явно определено. Из представления я привязываю свойство Text элемента TextBlock в представлении к свойству свойств зависимости (не статической части), но это не обновляет мой вид при изменении значения свойств зависимости (я знаю, как связать с явным интерфейсом, так что насколько я вижу, это не проблема).

Любая помощь будет принята с благодарностью. Могу ли я использовать свойства зависимости с явными интерфейсами? Если я могу, как, если нет, у вас есть какие-либо идеи о том, что я могу сделать в этой ситуации?

Спасибо за чтение, и я с нетерпением жду ваших ответов.

Адам

Ответы [ 2 ]

5 голосов
/ 25 декабря 2008

Я не совсем уверен, правильно ли я понял ваш вопрос, но почему бы просто не использовать INotifyPropertyChanged на вашей ViewModel?

например:

interface MyInterface : INotifyPropertyChanged
{
    string Text { get; set; }
}

class MyViewModel : MyInterface
{
    private string text;
    public string Text 
    {
        get { return text; }
        set 
        { 
            if (text != value)
            {
               text = value;
               // TODO: Raise the NotifyPropertyChanged event here
            }
        }
    }
}

С этим вы сможете просто связать свойство Text

1 голос
/ 25 декабря 2008

Вопрос слегка смущает, но я попробую. Я попробовал несколько вариантов свойства зависимости и не смог заставить его работать со следующим интерфейсом.

interface IViewModel
{
    string Text { get; set; }
}

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

public static readonly DependencyProperty TextProperty = 
    DependencyProperty.Register("Text", 
        typeof(string), typeof(IViewModel));

Затем я попытался реализовать интерфейс явно или неявно, но безрезультатно. Единственная комбинация, которая сработала, это когда я использовал.

public static readonly DependencyProperty TextProperty = 
    DependencyProperty.Register("Text", 
        typeof(string), typeof(ImplementingClass));

Если у вас возникли проблемы и вы ищете другие образцы WPF, вы можете попробовать их.

Удачи.

...