我正在使用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。 为什么会如此?
答案 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'方法。