如何DataContext在WPF应用程序中的设计时确定特定控件?
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>\nRun Code Online (Sandbox Code Playgroud)\n\n然后,在 Visual Studio 中,您可以将 IntelliSense 用于可绑定属性,如果您的视图模型具有不复杂甚至无参数的构造函数,它将在设计器中创建,您可以测试触发器或转换器,而无需启动应用程序。
\nDataContext的Control是ViewModel。ViewModel因此,设置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通过DependencyInjection或UnityContainer另一个 IoC 容器进行设置。但是DependencyInjection、Prism和UnityContainer是其他问题,并且来自该问题的范围。仅举个例子:
protected override void RegisterTypes()
{
unityContainer.RegisterType<object, ItemControl>("ModuleAUpper");
unityContainer.RegisterType<IViewModelItemControl, ViewModelItemControl>();
unityContainer.RegisterTypeForNavigation<ItemControl>();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2866 次 |
| 最近记录: |