Невозможно привязать View к ViewModel - PullRequest
2 голосов
/ 29 февраля 2012

Я пытаюсь сделать простейшую вещь: привязать View к ViewModel, но по какой-то причине это не работает.

У меня есть главное окно:

<Window x:Class="ImagesToAmazon.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525"
    xmlns:v="clr-namespace:ImagesToAmazon.View"
    xmlns:vm="clr-namespace:ImagesToAmazon.ViewModel" >

<Window.Resources>
    <DataTemplate DataType="{x:Type vm:MainViewModel}">
        <v:MainControl />
    </DataTemplate>
</Window.Resources>

<Grid>

</Grid>

MainViewModel:

namespace ImagesToAmazon.ViewModel{
public class MainViewModel {
}}

MainControl:

<UserControl x:Class="ImagesToAmazon.View.MainControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<StackPanel>
    <Button Content="Button" Height="23" Name="button1" Width="75" />
</StackPanel>

Кроме того, я перезаписываю App.OnStartup, чтобы установить контекст MainWindow:

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        var window = new MainWindow();
        var viewModel = new ViewModel.MainViewModel();
        window.DataContext = viewModel;

        window.Show();
    }
}

Все компилируются, но я не вижу свою кнопку из MainControl. Любые подсказки?

1 Ответ

1 голос
/ 29 февраля 2012

В главном окне замените сетку на

<ContentControl Content="{Binding }" />

Это попытается использовать текущий DataContext в качестве содержимого элемента управления, и он будет использовать DataTemplate u, определенный ранее.

...