C# 如何在XAML中实例化DataContext对象
我希望能够在XAML中为我的WPF StartupUri窗口创建一个C# 如何在XAML中实例化DataContext对象,c#,wpf,xaml,datacontext,C#,Wpf,Xaml,Datacontext,我希望能够在XAML中为我的WPF StartupUri窗口创建一个DataContext对象的实例,而不是创建它的代码,然后通过编程设置DataContext属性 主要原因是我不需要访问外部创建的对象,也不想只为设置DataContext而编写代码 我确信我在某个地方读过如何在XAML中实例化DataContext对象,但我在任何常见的地方都找不到它…为DataContext所在的名称空间添加XML名称空间,在窗口资源中创建它的实例,并将DataContext设置为该资源: <Windo
DataContext
对象的实例,而不是创建它的代码,然后通过编程设置DataContext
属性
主要原因是我不需要访问外部创建的对象,也不想只为设置DataContext
而编写代码
我确信我在某个地方读过如何在XAML中实例化
DataContext
对象,但我在任何常见的地方都找不到它…为DataContext所在的名称空间添加XML名称空间,在窗口资源中创建它的实例,并将DataContext设置为该资源:
<Window x:Class="WpfApplication4.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication4"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<local:MyViewModel x:Key="MyViewModel"/>
</Window.Resources>
<Grid DataContext="{StaticResource MyViewModel}">
</Grid>
</Window>
您可以直接在XAML中为整个窗口指定:
<Window
... xmlns definitions ...
>
<Window.DataContext>
<local:CustomViewModel />
</Window.DataContext>
</Window>
这将在别名为local的命名空间中创建一个名为“CustomViewModel”的视图模型,直接作为窗口的DataContext。假设以下代码:
public abstract class BaseView { }
public class RuntimeView : BaseView { }
public class DesigntimeView : BaseView { }
试试这个:
<Page.DataContext>
<local:RuntimeView />
</Page.DataContext>
<d:Page.DataContext>
<local:DesigntimeView />
</d:Page.DataContext>
<ListBox ItemsSource="{Binding}" />
祝你好运 如果需要将DataContext设置为相同的控制类:
<Window x:Class="TabControl.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TabControl"
Title="MainWindow" Height="350" Width="525"
DataContext="{Binding RelativeSource={RelativeSource Self}}"
>
</Window>
使用相对资源绑定。
或者只是
<Window x:Class="TabControl.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TabControl"
Title="MainWindow" Height="350" Width="525"
>
<Window.DataContext>
< new instance of any viewModel here....>
</Window.DataContext>
</Window>
<此处任何viewModel的新实例….>
如果要分配一个不同于自身的类的实例。+1因为它同时显示run和designtime,并且不使用x:Key,而是将DataContext直接放在它所属的元素中。在.NET framework 4.5中是否可以这样做?我试过这个密码,它说<代码>找不到类型“local:MyViewModel”。请验证您没有缺少程序集,并且所有引用的程序集都已生成。@RafafTahsin您是否确保名称空间正确?此外,如果将引用类型添加到项目中但尚未生成,WPF设计器会有点困惑。你试过建筑吗?