Как создать экземпляр объекта DataContext в XAML
Я хочу иметь возможность создать экземпляр DataContext
объект для моего окна WPF StartupUri в XAML, в отличие от создания его кода, а затем установки DataContext
собственность programmaticly.
основная причина в том, что мне не нужно обращаться к объекту, созданному извне, и я не хочу писать код только для установки DataContext
.
Я уверен, что где-то читал, как создать экземпляр DataContext
объект в XAML, но я не могу найти его ни в одном из обычных места...
4 ответов
вы добавляете пространство имен XML для любого пространства имен, в котором живет ваш DataContext, создаете его экземпляр в ресурсах окна и устанавливаете 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>
это создает модель представления с именем "CustomViewModel" в пространстве имен с псевдонимами local, непосредственно как 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>
использовать 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>
если вы хотите назначить экземпляр другого класса, чем он сам.