Я пытаюсь сделать простейшую вещь: привязать 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. Любые подсказки?
В главном окне замените сетку на
<ContentControl Content="{Binding }" />
Это попытается использовать текущий DataContext в качестве содержимого элемента управления, и он будет использовать DataTemplate u, определенный ранее.