在设计时确定WPF控件的DataContext

Nut*_*uts 6 c# wpf xaml mvvm

如何DataContextWPF应用程序中的设计时确定特定控件?

DataContext可能是XAML在代码中专门设置,继承或设置的,有时在设计时很难弄清楚绑定所指的类.

我通常尝试找到的DataContext类是在VS中搜索绑定名称.例如,我看到绑定就像

ItemSource = {Binding Items}
Run Code Online (Sandbox Code Playgroud)

...我将搜索文本"Items"以便进入课堂,但VS有时无法找到搜索到的文本(我在解决方案中有几个项目).

小智 6

我想添加一种方法到 StepUp\xc2\xb4s 列表:

\n\n

设计实例:

\n\n

就像您可以定义运行时数据上下文一样,您可以通过以下方式添加专门用于设计时的数据上下文:

\n\n
    <Usercontrol    x:Class="MyUserControl"  \n                    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"\n                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"\n                    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"\n                    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"\n                    xmlns:viewModels="clr-namespace:MyProject.ViewModels"\n                    d:DataContext="{d:DesignInstance viewModels:MyViewModel}"\n                    d:DesignHeight="300"\n                    d:DesignWidth="600"\n                    mc:Ignorable="d">\n    </UserControl>\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后,在 Visual Studio 中,您可以将 IntelliSense 用于可绑定属性,如果您的视图模型具有不复杂甚至无参数的构造函数,它将在设计器中创建,您可以测试触发器或转换器,而无需启动应用程序。

\n


Ste*_*pUp 3

DataContextControlViewModelViewModel因此,设置DataContextof 的方法有很多种View,如果你找到了你的ViewModel, 但在 中没有Items属性ViewModel,那么就意味着你应该添加这样的属性来获取工作绑定。

另外,我建议您查看Debug->Windows->Output可以查看绑定信息的窗口。那就是你可以知道绑定错误。

最后,我想展示设置的ViewModel方法DataContext

设置 DataContext 有多种方法:

第一种方法。视图中:

<Window.DataContext>
   <local:MainWindowViewModel/>
</Window.DataContext>
Run Code Online (Sandbox Code Playgroud)

第二种方法。你应该重写OnStartUp()方法App.xaml.cs

public partial class App : Application
{
     protected override void OnStartup(StartupEventArgs e)
    {
            base.OnStartup(e);
            MainWindow app = new MainWindow();
            ProductViewModel context = new ProductViewModel();
            app.DataContext = context;
            app.Show();
     }
}
Run Code Online (Sandbox Code Playgroud)

第三种办法。在 Windows 的构造函数中:

public partial class MainWindow : Window
{
     public MainWindow()
     {
          InitializeComponent();
          DataContext=new MainWindowViewModel();
     }
}
Run Code Online (Sandbox Code Playgroud)

第四种办法。您可以DataContext通过DependencyInjectionUnityContainer另一个 IoC 容器进行设置。但是DependencyInjectionPrismUnityContainer是其他问题,并且来自该问题的范围。仅举个例子:

protected override void RegisterTypes()
{ 
    unityContainer.RegisterType<object, ItemControl>("ModuleAUpper");
    unityContainer.RegisterType<IViewModelItemControl, ViewModelItemControl>();
    unityContainer.RegisterTypeForNavigation<ItemControl>();
}
Run Code Online (Sandbox Code Playgroud)