Как создать объект DataContext в XAML
Я хочу, чтобы создать экземпляр объекта DataContext
для моего окна WPF StartupUri в XAML, в отличие от его создания, а затем программно настроить свойство DataContext
.
Основная причина в том, что мне не нужен доступ к объекту, созданному извне, и я не хочу писать код только для установки DataContext
.
Я уверен, что где-то читал, как создать экземпляр объекта DataContext
в XAML, но я не могу найти его ни в одном из обычных мест...
Ответы
Ответ 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>
Если вы хотите назначить экземпляр другого класса, кроме самого себя.