【问题标题】:Adding View Model to Resources Silverlight将视图模型添加到资源 Silverlight
【发布时间】:2013-12-27 07:09:20
【问题描述】:

我有一个 Silverlight 应用程序。

我在 XAML 文件的类的构造函数中将资源和数据上下文添加到 Xaml.cs 文件,如下所示:

//Constructor
public Class()
    {
        _mainViewModel = new MainViewModel();
        this.Resources.Add("VM", _mainViewModel );
        InitializeComponent();
        this.DataContext = _mainViewModel ;
    }

一切正常。

当我在 XAML 文件中添加与以下相同的资源和数据上下文时:

<controls:UserControlClient.Resources>
    <vm:MainViewModel x:Key="mainViewModel" />
</controls:UserControlClient.Resources>
<controls:UserControlClient.DataContext >
    <vm:MainViewModel x:Name="mainViewModel"/>
</controls:UserControlClient.DataContext>

它导致了一个问题,并且所有设置的列表和属性都重新初始化了。 为什么会这样??

【问题讨论】:

    标签: c# silverlight silverlight-4.0


    【解决方案1】:

    查看@Amandeep 的回答。而且您在 XAML 中分配 DataContext 的方式也没有使用资源中声明的 ViewModel,这将实例化另一个 MainViewModel 对象。应该是:

    <StackPanel>
        <StackPanel.Resources>
            <vm:MainViewModel x:Key="mainViewModel" />
        </StackPanel.Resources>
        <controls:UserControlClient>
            <controls:UserControlClient.DataContext >
                <StaticResource ResourceKey="mainViewModel"/>
            </controls:UserControlClient.DataContext>
        </controls:UserControlClient>
    </StackPanel>
    

    或简单地将 DataContext 分配为属性而不是元素:

    <controls:UserControlClient DataContext="{StaticResource ResourceKey=mainViewModel}">
    

    【讨论】:

      【解决方案2】:

      资源和数据上下文必须在 xaml 或 cs 中给出。如果你同时给出这些,当你定义 datacontext 或资源时,它会像在 xaml 中一样重新初始化控制两次,它会再次调用“Initializecomponent”方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-17
        • 1970-01-01
        • 2013-08-08
        • 1970-01-01
        • 1970-01-01
        • 2018-09-25
        • 1970-01-01
        • 2018-07-16
        相关资源
        最近更新 更多