C# 如何在XAML中实例化DataContext对象

C# 如何在XAML中实例化DataContext对象,c#,wpf,xaml,datacontext,C#,Wpf,Xaml,Datacontext,我希望能够在XAML中为我的WPF StartupUri窗口创建一个DataContext对象的实例,而不是创建它的代码,然后通过编程设置DataContext属性 主要原因是我不需要访问外部创建的对象,也不想只为设置DataContext而编写代码 我确信我在某个地方读过如何在XAML中实例化DataContext对象,但我在任何常见的地方都找不到它…为DataContext所在的名称空间添加XML名称空间,在窗口资源中创建它的实例,并将DataContext设置为该资源: <Windo

我希望能够在XAML中为我的WPF StartupUri窗口创建一个
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设计器会有点困惑。你试过建筑吗?