2009-09-30 6 views
1

У меня есть простейшее свойство в моей модели представлений типа string. Я хочу связать это с текстовым полем, чтобы изменение текстового поля обновляло строку и изменение строки обновляло текстовое поле. Я действительно ДЕЙСТВИТЕЛЬНО написал класс оболочки вокруг типа строки, который реализует INotifyPropertyChanged, или я пропустил что-то невероятно простое здесь?wpf привязка данных - двусторонняя привязка со строкой?

ответ

2

Это действительно просто реализовать INotifyPropertyChanged. Но что бы я сделал, классы ViewModel почти всегда (если не всегда) наследуются от DependencyObject; Я бы сделал это свойство text DependencyProperty, которое автоматически уведомляет изменения о том, к чему это привязано. Вы можете использовать ярлык propdp в C# (в Visual Studio 2008, не уверен, что тоже 2005) для создания DependencyProperty быстрее, просто введите propdp и дважды нажмите клавишу Tab. Это будет выглядеть примерно так:

public string SomeText 
    { 
     get { return (string)GetValue(SomeTextProperty); } 
     set { SetValue(SomeTextProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for SomeText. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty SomeTextProperty = 
     DependencyProperty.Register("SomeText", typeof(string), typeof(YourClassName), new UIPropertyMetadata(String.Empty)); 
+0

Разве мы не делаем классы ViewModel тяжелыми, вызывая его из объекта зависимостей? – Trainee4Life

+0

Возможно, но с выгодами. У меня нет фактов, чтобы точно сказать, что они должны всегда выводиться из DependencyObject, но я читал об этом во многих статьях и слышал во многих видеороликах, здесь, например, blog.lab49.com/archives/2650 Jason Dolinger Intro to шаблон MVVM. Это звучит правильно для меня, потому что класс VM будет контролировать все аспекты окна (состояние, анимация, привязка). – Carlo

+1

Я тоже смотрел введение JD в MVVM и нашел, что это самый информативный скринкаст, который я видел на WPF. Это единственная причина, по которой я даже работаю с шаблоном MVVM прямо сейчас, вместо того, чтобы атаковать программу, используя встроенный стиль winforms для кодирования. Я не уверен, что объект весовой зависимости приносит с собой, но он кажется довольно естественным базовым классом, учитывая, какую цель должна использовать модель представления. – Chris

1

Использовать DependencyProperty.

+0

Я дал Карло ответ, потому что он был немного более подробным, но оценил вас тоже. Благодаря! – Chris

2

На самом деле вам не придется создавать класс обертки вокруг типа строки. INotifyPropertyChanged должен быть реализован для каждого класса ViewModel. Этот интерфейс необходим для отправки уведомления в структуру привязки об измененных данных.

Я бы рекомендовал посетить http://mvvmfoundation.codeplex.com/ и включить классы фундамента MVVM в проект WPF. Фонд MVVM предоставляет базовый набор многоразовых классов, которые каждый должен использовать. Хотя есть другие обширные рамки WPF, такие как Cinch, Onyx и т. Д., Вы можете использовать.

Смежные вопросы