2012-04-30 43 views
0

我需要创建一个小的GUI应用程序来手动调用一些驱动程序命令。总共有大约40个命令,其中一些还有其他参数。寻找一个很好的方法来显示mvvm的很多功能

请求是,所有的命令应该在一个页面上。除此之外,没有要求,因为它只是一个测试环境,用户体验只是一个小问题。

当我开始这样做“常规”的方式,只是为参数添加按钮和输入元素,我结​​束了一个非常混乱的用户界面。同时也感到明显的错误做这样的事情

<Button Command="{Binding DriverCommand} CommandParameter=1/> 

对于所有40个命令

所以我的问题是,什么是使大量的命令参数变化可用的好办法? 我更喜欢MVVM的方式,只是因为我想进一步学习这种模式。 在我的viewmodel中有我的命令(作为枚举?)并且可以将它绑定到视图中的控件的实现将是理想的。然后我可以用不同的驱动程序重用UI(这是非常可能的)。

在此先感谢

+0

可能更适合http://ux.stackexchange.com/。 – Jon

+0

@Jon取决于OP是否在为此设计一个良好的用户体验,或仅仅是如何在WPF中实现一个基本的用户界面。听起来像是某种测试应用程序,这意味着一个简单的用户界面可能是好的。 –

+0

是的,一个简单的用户界面绝对可以,这是问题的一部分。 我无法将它们按任何优先级或任何东西分组,没有正确或良好的顺序。 – Daniel

回答

2

你可以用类似下面的东西去:

景观的模型:

public class CommandDashboardViewModel 
{ 
    public ObservableCollection<DriverCommandViewModel> DriverCommands { get; set; } 
} 

public class DriverCommandViewModel 
{ 
    // all of these properties have to implement INPC 
    public string CommandText { get; set; } 
    public ICommand Command { get; set; } 
    public object CommandParameter { get; set; } 
} 

查看:

<!-- the DataContext of this view is instance of CommandDashboardViewModel --> 
<ItemsControl ItemsSource="{Binding DriverCommands}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Button Content={Binding CommandText} Command={Binding Command} CommandParameter={Binding CommandParameter}/> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

我的推杆它我的头顶一起,所以我对任何语法错误表示歉意。

+0

好的解决方案!要完成MVVM模式,您需要每个ViewModel对象“包装”模型对象。我的意思是,ViewModel类可以有一个接受模型对象的构造函数,并且属性可以是只读的,并且可以查看模型对象状态 – Roberto

+0

谢谢!这是我正在寻找的。 – Daniel

相关问题