How to instantiate DataContext object in XAML

后端 未结 4 1437
独厮守ぢ
独厮守ぢ 2020-12-29 03:46

I want to be able to create an instance of the DataContext object for my WPF StartupUri window in XAML, as opposed to creating it code and then setting the

相关标签:
4条回答
  • 2020-12-29 03:56

    Assuming this code:

    public abstract class BaseView { }
    public class RuntimeView : BaseView { }
    public class DesigntimeView : BaseView { }
    

    Try this:

    <Page.DataContext>
        <local:RuntimeView />
    </Page.DataContext>
    <d:Page.DataContext>
        <local:DesigntimeView />
    </d:Page.DataContext>
    <ListBox ItemsSource="{Binding}" />
    

    Best of luck!

    0 讨论(0)
  • 2020-12-29 04:04

    If you need to set the DataContext as same control class:

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

    use RelativeSource binding.

    or just

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

    If want to assign an instance of different class than itself.

    0 讨论(0)
  • 2020-12-29 04:09

    You add an XML namespace for whatever namespace your DataContext lives in, create an instance of it in the Window Resources and set the DataContext to that resource:

    <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>
    
    0 讨论(0)
  • 2020-12-29 04:09

    You can just specify this directly in XAML for the entire Window:

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

    This creates a view model named "CustomViewModel" in the namespace aliased to local, directly as the DataContext for the Window.

    0 讨论(0)
提交回复
热议问题