【发布时间】:2016-02-06 15:20:50
【问题描述】:
有人告诉我,在 MVVM 中为视图设置 DataContext 的最佳方法是使用 DataTemplate。所以我试图通过使用 DataTemplate 将 MainWindow 的 DataContext 设置为 MainWindowViewModel 的一个实例。
我一直无法弄清楚如何。
我尝试将 ResourceDictionary 放在不同的地方(在 App.xaml 中,在 Window.Resources 标记中......)
我用谷歌搜索无济于事。这就是我所拥有的......(它不起作用,但是,它在这里)
App.xaml:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary1.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Dictionary1.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:DataTemplateTesting" >
<DataTemplate DataType="{x:Type local:MainViewModel}">
<local:MainWindow/>
</DataTemplate>
</ResourceDictionary>
MainViewModel.cs
namespace DataTemplateTesting
{
public class MainViewModel
{
public MainViewModel() { }
}
}
我唯一做的另一件事是在 MainWindow 中为 DataContextChanged 事件添加一个处理程序,这样我就可以查看它是否触发了......它没有。
有什么办法解决这个问题吗?
编辑: 并不是说这里有什么不能生成的,而是……这是 MainWindow 代码。
MainWindow.xaml
<Window x:Class="DataTemplateTesting.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:DataTemplateTesting"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525"
DataContextChanged="Window_DataContextChanged" >
<Grid>
</Grid>
</Window>
MainWindow.xaml.cs
namespace DataTemplateTesting
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
int i = 10; //This line exists solely to put a debug stop on.
}
}
}
【问题讨论】:
-
你能添加
MainWindow代码吗? -
没有任何 MainWindow 代码。我唯一做的就是为 DataContextChanged 添加一个事件处理程序,这样我就可以看到它了。最好没有 MainWindow 代码。
-
有一个
MainWindow控件,对吧?那么,必须有一些xaml代码来定义它。 -
你去...我猜。自动生成的相同代码加上一个事件处理程序。
标签: wpf data-binding datatemplate datacontext