我最近开始在silverlight中使用MVVM模式,并且我不确定我是否正确使用它。我在哪里放置ICommand的逻辑?
GUI
我现在有有股市行业组合框一个的MainView。当用户选择一个扇区(例如能源)并点击添加按钮时,该扇区的股票列表将显示在列表框中。在列表框中的每个股票的边上都有一个删除按钮,允许您从列表框中删除单个股票。
我已经实现了以下ViewModels。 (下面仅仅是代码的指示)
public class MainViewModel
{
public SectorViewModel CurrentSector
{
get;
set;
}
public string SelectedSector
{
get;
set;
}
public void AddSectorClickedCommand()
{
CurrentSector = new SectorViewModel(SelectedSector);
}
}
public class SectorViewModel
{
public ObservableCollection<StockViewModel> Stocks = new ObservableCollection<StockViewModel>();
public SectorViewModel(string sector)
{
List<Stocks> stocklist = StockProvider.GetStocks(sector);
for each (var s in stocklist)
{
StockViewModel svm = new StockViewModel(s);
svm.Remove+= { //Remove svm from Stocks collection logic
Stocks.add(svm);
}
}
}
我的问题是;在视图模型中,最好为列表框中每行的Remove按钮添加代码实现?删除按钮应该从SectorViewModel.Stocks集合中删除StockViewModel。
我目前已将RemoveClicked方法添加到StockViewModel(如上所示)。此代码将事件触发回SectorViewModel,并且SectorViewModel的RemoveStock方法从Stock集合中删除StockViewModel。
是否有更好的方法来实现这个删除功能?我是MVVM的新手,并不确定这是否是开发此功能的最佳方法,因为SectorViewModel需要注册到StockViewModel的事件。
我的设计似乎没问题,因为这也是什么在这里做了什么http://msdn.microsoft.com/en-us/magazine/dd419663.aspx#id0090016 – caa 2011-12-17 14:27:09