我正在开发一个小程序,并尝试使用DataTemplate遵循MVVM方法为我的VM创建视图。我遇到的问题是,它没有显示视图的实例,而是显示了VM的ToString()结果。如果我在View类的构造函数上放置一个断点(MainNavigation.xaml),将永远无法达到。
下面的代码,帮助赞赏。
MainWindow.xaml
<Window x:Class="Tester.Wpf.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:Tester.Wpf"
xmlns:scr="clr-namespace:Tester.Wpf.Screens"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<DataTemplate DataType="x:Type scr:MainNavigationViewModel">
<scr:MainNavigation />
</DataTemplate>
</Window.Resources>
<Grid>
<ContentControl Name="MainNav" Content="{Binding MainNavigationViewModel2}" />
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
MainWindow.xaml.cs
using System.ComponentModel;
using System.Windows;
using Tester.Wpf.Screens;
namespace Tester.Wpf
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window, INotifyPropertyChanged
{
private MainNavigationViewModel _mainNavigationViewModel;
public MainWindow()
{
this.DataContext = this;
this.MainNavigationViewModel2 = new MainNavigationViewModel();
InitializeComponent();
}
public MainNavigationViewModel MainNavigationViewModel2
{
get { return …Run Code Online (Sandbox Code Playgroud) 我正在尝试开发一个可重用的 UserControl,但遇到了绑定问题。我创建了一个较小的应用程序来测试它,但无法对其进行整理,或者至少理解为什么它没有按我的预期工作。
代码如下。我期望的是我放在 MainWindow.xaml 上的 TestUserControl 的实例将继承那里的 DataContext 就像下面的 TextBlock 一样。相反,它的 DataContext 似乎为空。DataContext 没有传递下去有什么原因吗?我必须自动设置吗?
主窗口.xaml
<Window x:Class="WpfTestApp.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:WpfTestApp"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<StackPanel Orientation="Vertical">
<local:TestUserControl TextFromParent="{Binding SomeText}" />
<TextBlock Name="TestTextBlock" Text="{Binding SomeText}" />
</StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
主窗口.xaml.cs
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows;
namespace WpfTestApp
{
public partial class MainWindow : Window, INotifyPropertyChanged
{
private string _someText;
public MainWindow()
{
DataContext = this;
InitializeComponent();
SomeText = "New Text!";
}
public string SomeText
{
get { return _someText; …Run Code Online (Sandbox Code Playgroud)