我听说在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
的代码吗? - Yusuf Tarık GünaydınMainWindow
控件,对吧?那么,一定有一些 xaml 代码来定义它。 - Yusuf Tarık Günaydın