Вопрос в значительной степени говорит обо всем.
У меня есть окно, и я пытался установить DataContext, используя полное пространство имен для ViewModel, но, похоже, я что-то делаю не так.
<Window x:Class="BuildAssistantUI.BuildAssistantWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="BuildAssistantUI.ViewModels.MainViewModel">
Ответы:
В дополнение к решению, которое предоставили другие люди (которое является хорошим и правильным), есть способ указать ViewModel в XAML, но при этом отделить конкретную ViewModel от View. Их разделение полезно, когда вы хотите написать отдельные тестовые примеры.
В App.xaml:
В MainWindow.xaml:
источник
Попробуйте вместо этого.
источник
Window
элемента, напримерDataContext="VM:MainWindowViewModel"
?MarkupExtension
, никогда не делал этого на виртуальных машинах, но вы могли бы сделать это с помощью конвертеров, чтобы убедиться, что присутствует только один экземпляр конвертера, и вызвать его непосредственно из xaml с="{converters:SomethingConverter}"
, подразумеваяxmlns:converters
точки в пространстве имен конвертера.public abstract class BaseValueConverter<T> : MarkupExtension, IValueConverter where T : class, new() { private static T _converter; public override object ProvideValue(IServiceProvider serviceProvider) { return _converter ?? (_converter = new T()); } }
Вам нужно создать экземпляр MainViewModel и установить его как datacontext. В вашем заявлении он просто рассматривает его как строковое значение.
источник
Вы можете попробовать Catel . Он позволяет вам определять класс DataWindow (вместо Window), и этот класс автоматически создает для вас модель представления. Таким образом, вы можете использовать объявление ViewModel, как вы это делали в исходном посте, и модель представления все равно будет создана и установлена как DataContext.
См. Пример в этой статье .
источник
Также существует такой способ указания модели просмотра:
<Rant>
Все ранее предложенные решения требуют
MainViewModel
наличия конструктора без параметров.Microsoft считает, что системы могут быть построены с использованием конструкторов без параметров. Если вы тоже под этим впечатлением, воспользуйтесь другими решениями.
Для тех, кто знает, что конструкторы должны иметь параметры, и поэтому создание экземпляров объектов нельзя оставлять в руках волшебных фреймворков, правильный способ указания модели представления - это тот, который я показал выше.
</Rant>
источник