在设计时确定WPF控件的DataContext

时间:2016-04-08 06:51:22

标签: c# wpf xaml mvvm

如何在DataContext申请中的设计时确定特定控件的WPF

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

我通常尝试查找DataContext类的是在VS中搜索绑定名称。例如,我看到绑定类似于

ItemSource = {Binding Items}

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

2 个答案:

答案 0 :(得分:2)

我想在StepUp的列表中添加一种方法:

设计实例:

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

    <Usercontrol    x:Class="MyUserControl"  
                    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:viewModels="clr-namespace:MyProject.ViewModels"
                    d:DataContext="{d:DesignInstance viewModels:MyViewModel}"
                    d:DesignHeight="300"
                    d:DesignWidth="600"
                    mc:Ignorable="d">
    </UserControl>

在Visual Studio中,您可以将IntelliSense用于可绑定属性,如果您的视图模型具有简单甚至无参数构造函数,则它将在Designer中创建,您无需启动应用程序即可测试触发器或转换器。

答案 1 :(得分:1)

<body onbeforeunload="return ask()"> <h1>onbeforeunload Test</h1> <a href="http://www.google.de">Google</a> </body>的{​​p> DataContextControl。因此,有ViewModel ViewModel DataContext设置View的方法很多,如果找到ViewModel,但Items中没有ViewModel属性那么这意味着你应该添加这样的属性来获得工作绑定。

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

总而言之,我想说明如何将ViewModel设置为DataContext

设置DataContext有很多种方法:

第一种方法。在视图中:

<Window.DataContext>
   <local:MainWindowViewModel/>
</Window.DataContext>

第二种方法。您应该覆盖OnStartUp()的{​​{1}}方法

App.xaml.cs

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

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();
     }
}

第四种方法。您可以通过public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext=new MainWindowViewModel(); } } 或其他IoC容器将DataContext设置为DependencyInjection。但是UnityContainerDependencyInjectionPrism是其他问题,并且来自问题的这个范围。仅举例:

UnityContainer