我对一些可能非常简单的事情感到茫然。 我做了搜索,但找到了我需要的确切答案。
问题如下。
我正在教自己的Silverlight MVVM。 目前我正在编写一个使用1个主页和2个用户控件的应用程序。
可以想象,3个视图模型。
目前在我的XAML中:
MainPage.xaml中
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:newFileupload.ViewModel"
xmlns:vw="clr-namespace:newFileupload.View"
<UserControl.DataContext>
<vm:MainPageViewModel />
</UserControl.DataContext>
<Grid x:Name="LayoutRoot" Background="White">
<vw:PicturesOverviewView />
</Grid>
PicturesOverviewView.xaml
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
<Grid x:Name="LayoutRoot" Background="White">
</Grid>
所以在mainpage.xaml中,我在xaml中设置了datacontext,然后在网格中调用usercontrol,如下所示:
<vw:PicturesOverviewView />
这给了我以下错误:
Error 1 Cannot create an instance of "PicturesOverviewView". C:\Programming\C#\newFileUpload\newFileupload\MainPage.xaml 16 9 newFileupload
我完全不知道造成这种情况的原因,其次是......
如何将视图模型绑定到适当的用户控件?
我是否需要为每个usercontrol声明视图命名空间,然后像主页一样设置其datacontext?
感谢您花时间阅读,我希望能够尽快继续阅读:)
答案 0 :(得分:3)
如果显示的代码正确,则表示您正在尝试在PicturesOverviewView控件中创建PicturesOverviewView控件。这将解释编译错误。 (我猜你已经剪掉了两次相同的Xaml)。
装订明智: 您希望将子控件绑定到主视图Model上的属性,这些属性本身就是视图模型
e.g。
namespace newFileupload.ViewModel
{
public class MainPageViewModel
{
public ChildViewModel1 ChildViewModel1 { get; set; }
public ChildViewModel2 ChildViewModel2 { get; set; }
public MainPageViewModel()
{
this.ChildViewModel1 = new ChildViewModel1() { SomeProperty = "hello"};
this.ChildViewModel2 = new ChildViewModel2() { SomeProperty = "there" };
}
}
}
然后MainPage绑定如下:
<Grid x:Name="LayoutRoot" Background="White">
<vw:PicturesOverviewView DataContext="{Binding Path=ChildViewModel1}" />
<vw:PicturesOverviewView DataContext="{Binding Path=ChildViewModel2}" />
</Grid>
某处需要使用正确的数据创建视图模型。将子项挂起父视图模型是有意义的。
我建议你看一下使用IOC注入(例如使用Unity),因为听起来你可能只是希望创建在不同级别引用的单例。问题在于您希望在何处提供重用,就好像您在子视图中硬连接数据上下文一样,您无法重复使用它们。