我正在使用MVVM并使用许多类似的命令遇到以下问题。
我想制作许多用于展示不同类别书籍的按钮。
该模型是关于一本书的一些数据,比如说,
class book
{
string name;
string author;
.....
.....
string category;
}
存储书籍列表。 GUI用于用户查看具有不同类别的书籍。因此,创建了每个类别的按钮。例如:
Buttons:
Comic
Social
Academic
Science
Leisure
Political
Cartoon
Gambling
Magazine
All
我必须创建大约10个按钮。 (9个类别,1个用于查看全部)
在MVVM中,每个按钮都有自己的命令。从那时起,ViewModel中将有10个命令。但是,它的编码9非常相似,只有该类别的差异。
所以,我想问一下是否有任何建议/方法可以让它更节省代码?
我确实有一个想法。那就是将所有命令合并为一个。但是,此方法需要View(Xaml)将每个按钮中的CommandParameter传递给one命令,以便区分不同的类别。这将使XAML更复杂,并增加与ViewModels / Business逻辑的耦合级别。
那么,会有更简洁的方法吗?
答案 0 :(得分:2)
您可以使用Microsoft.Practices.Composite.Presentation.dll中的DelegateCommand并使用CommandParameter
<Button Command="{Binding bookCmd}" CommandParameter="Comic">
<Button Command="{Binding bookCmd}" CommandParameter="Music">
<Button Command="{Binding bookCmd}" CommandParameter="News">
private DelegateCommand<string> _bookCmd;
_bookCmd= new DelegateCommand<string>(ExecuteBookCmd);
private void ExecuteBookCmd(string category)
{
//Have fun
}