WPF: Привязка с нестазированным параметром? (Вопрос новичка)
-
22-09-2019 - |
Вопрос
Это, вероятно, будет очевидно, но я не могу найти лучший путь.
Я хочу показать Todo пользователя в списке. Эти Todo находятся в базе данных и состоят из идентификатора, пользователя и описания.
Пользователь вошел в приложение.
Как я могу получить TODO для этого определенного пользователя и настроить его для привязки к списку?
Я пытался с ObjectDatAprovider, но я не могу понять, как использовать это в сочетании с нестатическими вещами (например, My _DBService, UserId, Language, ...).
Являются ли единственные варианты, чтобы сделать все эти вещи статичными в зависимости от привязки в коде?
Если так, это означает, что ObjectDataprovider не очень полезен, нет? Я нахожу много примеров того, как он используется с жестким параметром, но я вряд ли вижу какую -либо ситуацию, когда мне понадобится такая функциональность.
Решение
Я делаю весь свой WPF, используя Модель-View-ViewModel шаблон. Я дал вам одну ссылку, но Google даст вам нагрузки. MVVM, по -видимому, является стандартной шаблоном для WPF. Этот проект Вероятно, сложнее, чем вам нужно, но он хорошо написан и приносит домой использование MVVM.
По сути, вы создаете модель ваших данных. В этом случае вы, вероятно, создали бы простой класс (я назову его Todoitem) с идентификатором свойств, идентификатором пользователя и описанием. Используйте предпочитаемый механизм, чтобы получить их из базы данных. Ссылка на SQL, Entity Framework, стандартный запрос, что угодно.
Затем у вас есть ваш ViewModel - у вас есть экземпляр ViewModel для каждого экземпляра модели: у виртуальной машины есть ссылка на свойства M и «вперед». ViewModel - это то, что вы используете для манипулирования моделью.
Тогда у вас есть ваше мнение - это пользовательский интерфейс. Вы устанавливаете DataContext представления как ViewModel, а затем ваши привязки автоматически связываются с ViewModel. Ваше мнение просто в конечном итоге становится тем, что вы можете увидеть. Вся работа выполняется в ViewModel. Это означает, что это очень легко проверить.
Таким образом, когда вы нажимаете кнопку в вашем представлении, привязки передают это в команду в вашем просмотре, которая манипулирует моделью.
Пользовательский интерфейс также является представлением с ViewModel. Таким образом, ваша виртуальная машина пользовательского интерфейса может загрузить коллекцию моделей из базы данных и закрепить их в наблюдение. Коллекция элементов Listbox будет связана с этим наблюдением.
Трудно объяснить все это в таком посте. Прочитайте пару статей и посмотрите, что вы думаете. Я все еще довольно новый в этом, но я считаю, что мое чтение о MVVM окупилось.
Другие советы
Хела Томас, Том здесь, из орбита One :)
MVVM - это путь. Я в своем 4 -м проекте, и WPF действительно сияет, если вы используете MVVM. Вы уже пробовали MVC (или MVP, как мы делали на The Recy*Tire), и это хорошее разделение. MVVM делает еще один шаг вперед, так как ViewModel абсолютно ничего не знает о представлении.
Представление связывается с ViewModel, поэтому он имеет ссылку на него (2 способа, очень мощный и работает за пределами типичной демонстрации MS). ViewModel - это просто Poco и является представлением вашей точки зрения, данных + поведение. После того, как вы копаете этот абзац, прохладный термин MVVM не будет иметь никаких секретов.
Я вижу, смогу ли я придумать небольшую демонстрацию. Может, у меня будет время позже. Что я приду к представлению (XAML, File 1), который связывается с ViewModel (файл 2, класс POCO, который не должен ошибаться с кодом позади). Модель может быть тем, что вам нравится (сервисный уровень или непосредственно в репозитории). Используя силу двухстороннего привязки, мы свяжемся с наблюдаемой коллекцией, что означает, что, если мы добавим/удалим/... что -то в коллекцию, представление займет его, не внедряя в нее энергию.
Мои первые 2 проекта WPF были сделаны с Caliburn Micro (см. Codeplex), которая является мощной структурой, основанной на соглашениях. Он откидывает вас от хардкорного WPF (в основном создание свойств тур -зависимости в основном), и вы можете создать что -то относительно быстрое, без полного понимания WPF. Это недостаток себя, но это сработало для меня. По состоянию на проект 3 я сам начал укротить эти свойства зависимости, и это сделает вас лучшим разработчиком WPF.
Я вижу, что вопрос с октября .. Вы нашли хорошее решение?