好吧,所以我做了一堆搜索,并且我似乎无法将我的头围绕正确的问题,或者它只是没有完成...WPF使用MVVM动态添加单个控件通过绑定使用MVVM
基本上我有一个模块化的应用程序,其中包含各种数据驱动的'Applets',它可能会根据已提供给用户的权限进行更改和动态添加。我已经在Flex中构建了这个应用程序,并且我们通过MVVM将它移植到WPF中,因为它使我们更容易编码和维护。
现在,有两个问题,我想弄清楚:
问题#1
我需要能够通过结合动态地添加一个单一的控制。我已经使用ItemsControl上的数据模板构建了绑定,这些模板连接到ViewModel中的对象列表,并且工作起来很奇妙,但是当我知道只有一个控件时,系统似乎有点冒失,但它使我现在。
这里是我的代码,为了说明为什么这似乎哈克对我说:
XAML
<ItemsControl ItemsSource="{Binding ApplicationList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CTRL:PortalApplicationControl />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
视图模型
/// <summary>
/// A List to contain the currently active application for binding to the ItemsControl in XAML
/// </summary>
public List<Models.Application> ApplicationList
{
get { return (List<Models.Application>)GetValue(ApplicationListProperty); }
set { SetValue(ApplicationListProperty, value); }
}
public static readonly DependencyProperty ApplicationListProperty =
DependencyProperty.Register("ApplicationList", typeof(List<Models.Application>), typeof(ApplicationVM));
/// <summary>
/// The currently active application
/// </summary>
public Models.Application Application
{
get { return (Models.Application)GetValue(ApplicationProperty); }
set { SetValue(ApplicationProperty, value); ApplicationList = new List<Models.Application>() { Application }; }
}
public static readonly DependencyProperty ApplicationProperty =
DependencyProperty.Register("Application", typeof(Models.Application), typeof(ApplicationVM));
正如你所看到的,这是哈克就意味着绑定到Application依赖项属性上的属性的对象能够调用'{Binding Application.Name}',但ItemsControl必须调用'{Binding ApplicationList}',并且Application的setter必须实例化一个长度为1的新'List'以依次设置ApplicationList对象。 。它的工作原理,但它不是很优雅,我想知道是否有完成这个任务的另一种方式
问题2:
好了,现在我们得到抛出猴子扳手在部分上面的整个结构:如果我想要根据哪个Application对象当前处于活动状态在数据模板中使用不同的控件,该怎么办? I.E.如果Application1当前处于活动状态,请使用Application1View,但是如果Application2当前处于活动状态,请使用Application2View ...这看起来好像我将不得不在代码中执行一些工作才能使其工作......并且这让我感到担忧一个大的不,如果我坚持MVVM结构
对不起,长时间的啰嗦,我希望这个问题是合理的,并感谢您提供的任何帮助......这是我的项目停滞不前直到我能解决以上问题
我无法准确理解您要找的内容。你想为任何一个ViewModel使用不同的视图吗? – jugg1es 2013-04-05 17:42:44
如果只有一个控件在同一时间,请使用ContentControl:http://msdn.microsoft.com/en-us/library/vstudio/system.windows.controls.contentcontrol。aspx – 2013-04-05 18:00:02
@FlorianGl这就是我正在寻找的东西,如果你想回答这个问题,请把它作为答案发布,所以我可以这样做...... @ jugg1es不,对于每个应用程序都会有不同的视图和视图模型,我想要传递给用户界面并打开的是模型,然后确定显示哪个视图作为结果...然后通过依赖注入,viewmodel在通过数据模板创建视图时得到解决 – 2013-04-05 18:14:23