wpf -d.datacontext-如何在运行时启动设计中的数据?

问题描述 投票:0回答:1

我需要在设计时间设置我的sharedViewModel,以在我的ui

中显示数据

当我运行该应用程序时,我在屏幕上看到数据,因为onloaded runsloadStuffs

loadStuffs启动共享视图模型并创建数据

但是在重建后的设计时间,设计师没有出现 <Window x:Class="MyApp.MainWindow" mc:Ignorable="d" xmlns:local="clr-namespace:MyApp" ... Loaded="OnLoaded" d:DataContext="{Binding RelativeSource={RelativeSource Self}, Path=SharedViewModel}" >

在运行时,这些被执行
    void OnLoaded(object sender, RoutedEventArgs e)
    {
        LoadStuffs();
    }

    private void LoadStuffs()
    {
        Logger.Log("LoadStuffs() executed!");
        ...
        SharedViewModel = ...
    }

消息“执行loadStuffs()已执行!”仅在运行时出现,从不
主要类的属性:

private SharedViewModel m_sharedViewModel; public SharedViewModel SharedViewModel { set { m_sharedViewModel= value; } get { Logger.Log("SharedViewModel getter"); <<<<< this is never called as the log.txt is only created at runtime if (m_sharedViewModel == null) { Logger.Log("Initializing DesignSharedViewModel"); LoadStuffs(); // Initializes m_sharedViewModel } return m_sharedViewModel; } }

感谢您在此方面的帮助

在设计时间和运行时都使用

ViewModel

模式,将A分配给
wpf datacontext designer
1个回答
0
投票
的最干净的方式。

1-添加一个类以处理ViewModels的创建。

ViewModelLocator
2-在app.xaml中创建此定位器类的实例,使其成为一个应用程序宽resouce.
public class ViewModelLocator
{
    public ViewModelLocator()
    {
        // include any IOC setup here if required.
    }

    public MainViewModel MainViewModel
    {
        get 
        {
            return new MainViewModel();

            // replace this with a call to the IOC container if any injected servies are required.
        }
   } 

   // repeat for any other ViewModel types required.
}

3-在每个视图中,将此定位器实例作为其

<Application.Resources> <local:ViewModelLocator x:Key="ViewModelLocator"> </Application.Resources>

DataContext

对于一个更详细的示例,包括如何为设计时间和运行时间使用不同注射服务,请查看我的
BLOGPOST
.

	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.