Подтвердить что ты не робот

Как создать объект DataContext в XAML

Я хочу, чтобы создать экземпляр объекта DataContext для моего окна WPF StartupUri в XAML, в отличие от его создания, а затем программно настроить свойство DataContext.

Основная причина в том, что мне не нужен доступ к объекту, созданному извне, и я не хочу писать код только для установки DataContext.

Я уверен, что где-то читал, как создать экземпляр объекта DataContext в XAML, но я не могу найти его ни в одном из обычных мест...

4b9b3361

Ответ 1

Вы добавляете пространство имен XML для любого пространства имен, в котором живет ваш DataContext, создайте его экземпляр в Ресурсах Windows и установите 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>

Ответ 2

Вы можете просто указать это непосредственно в XAML для всего окна:

<Window 
    ... xmlns definitions ...
>
   <Window.DataContext>
        <local:CustomViewModel />
   </Window.DataContext>
</Window>

Это создает модель представления с именем "CustomViewModel" в пространстве имен, псевдонимом которой является локальная, непосредственно как DataContext для окна.

Ответ 3

Предполагая этот код:

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}" />

Удачи!

Ответ 4

Если вам необходимо установить 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>

использовать привязку RelativeSource.

или просто

     <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>

Если вы хотите назначить экземпляр другого класса, кроме самого себя.