首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要可重用的SelectAll ViewModel

需要可重用的SelectAll ViewModel
EN

Stack Overflow用户
提问于 2011-08-31 04:02:12
回答 2查看 118关注 0票数 1

我经常遇到这样的情况,我希望有一个3-State复选框来选择/取消选择我所有的视图模型。我在创建一个可重用的类来做这件事时遇到了困难。

我尝试创建以下基类:

代码语言:javascript
复制
public class SelectAllListVM
{
   public List<SelectableVM> ChildList = new List<SelectableVM>();
   public bool? SelectAll   // call UpdateSelectedChildren on set 

   internal void UpdateSelectAll ()   
      // Set SelectAll based on ChildList elements
      // true = all selected,  false = non selected, null = some selected


   private void UpdateSelectedChildren ()   {
      foreach ( SelectableVM vm in ChildList )
         vm.SetIsSelected( SelectAll.Value );
   }
}

public class SelectableVM
{
   public SelectableVM (SelectAllListVM parentVM) {}
   public bool IsSelected    // call parentVM.UpdateSelectAll 
}

这样做的问题是,每次我想遍历ChildList时,我都必须将SelectableVM转换为它的具体实现。如何重用此行为并避免强制转换?

EN

回答 2

Stack Overflow用户

发布于 2011-08-31 04:34:40

您可以创建一个接口ISelectableVM

代码语言:javascript
复制
public interface ISelectableVM
{
   public bool IsSelected;
}

并在派生类中实现它。

代码语言:javascript
复制
public class SelectableVM : ISelectableVM
{}

public class OtherSelectableVM : ISelectableVM
{}

那么在你的ParentVM中,你就不需要强制转换:

代码语言:javascript
复制
public class SelectAllListVM
{
   public List<ISelectableVM> ChildList = new List<ISelectableVM>();
   public bool? SelectAll; // call UpdateSelectedChildren on set 

   private void UpdateSelectedChildren()
   {
      foreach (ISelectableVM vm in ChildList)
         vm.IsSelected = SelectAll.Value;
   }
}

除了interface之外,您还可以使用

代码语言:javascript
复制
public class BaseSelectableVM
{
   public bool IsSelected;
}

并从中派生出。

票数 1
EN

Stack Overflow用户

发布于 2011-08-31 07:17:58

为了做到这一点,我曾经做过一些附加行为的把戏。一切都是由视图处理的,不需要VM关心select all逻辑。我写了三个部分(part 1part 2part 3)的细节。我把代码放在了fileden...and上,后来因为登录次数不够多而丢失了。但是所有的代码都在这三篇文章中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7249092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档