Как привязать ViewModel к представлению XAML в MVVM? [Дубликат]

Чтобы использовать методы и член объекта, вам сначала нужно создать этот объект. Если вы его не создали (переменная, которая должна содержать объект, не инициализируется), но вы пытаетесь использовать его методы или переменные, вы получите эту ошибку.

Иногда вы можете просто забыть инициализировать .

Отредактировано: new не может вернуть значение null, но исключение огня при ошибке. Давно это было на некоторых языках, но не больше. Спасибо @John Saunders за указание на это.

81
задан Binil 4 January 2011 в 04:46
поделиться

4 ответа

В дополнение к решению, которое предоставили другие люди (которые хороши и правильны), есть способ указать ViewModel в XAML, но все же отделить конкретный ViewModel от представления.

В App.xaml:

<Application
    x:Class="BuildAssistantUI.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:BuildAssistantUI.ViewModels"
    StartupUri="MainWindow.xaml"
    >
    <Application.Resources>
        <local:MainViewModel x:Key="MainViewModel" />
    </Application.Resources>
</Application>

В MainWindow.xaml:

<Window x:Class="BuildAssistantUI.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    DataContext="{StaticResource MainViewModel}"
    />
97
ответ дан sweaver2112 23 August 2018 в 19:27
поделиться

Возможно, вы захотите попробовать Catel . Он позволяет определить класс DataWindow (вместо Window), и этот класс автоматически создает для вас модель представления. Таким образом, вы можете использовать объявление ViewModel так же, как и в своем исходном сообщении, и модель представления все равно будет создана и установлена ​​как DataContext.

См. в этой статье для пример.

3
ответ дан Geert van Horrik 23 August 2018 в 19:27
поделиться

Вам нужно создать экземпляр MainViewModel и установить его как datacontext. В вашем заявлении он просто рассматривает это как строковое значение.

     <Window x:Class="BuildAssistantUI.BuildAssistantWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:BuildAssistantUI.ViewModels">
      <Window.DataContext>
        <local:MainViewModel/>
      </Window.DataContext>
9
ответ дан Jobi Joy 23 August 2018 в 19:27
поделиться

Попробуйте это вместо.

<Window x:Class="BuildAssistantUI.BuildAssistantWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:VM="clr-namespace:BuildAssistantUI.ViewModels">
    <Window.DataContext>
        <VM:MainViewModel />
    </Window.DataContext>
</Window>
120
ответ дан Josh 23 August 2018 в 19:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: