将视图模型添加到资源Silverlight

时间:2013-12-27 07:09:20

标签: c# silverlight silverlight-4.0

我正在使用Silverlight应用程序。

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

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

一切正常。

当我在XAML文件中添加相同的资源和datacontext时,如下所示:

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

它导致问题,并且所有设置的列表和属性都是重新初始化的agin。 为什么会如此?

2 个答案:

答案 0 :(得分:1)

请参阅@ Amandeep的回答。而且,在XAML中分配DataContext的方式也没有使用在Resources中声明的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}">

答案 1 :(得分:0)

必须在xaml或cs中给出资源和数据上下文。如果你在两者上给出这些,它将在xaml中重新控制控制两次,当你定义datacontext或资源时它将再次调用'Initializecomponent'方法。