我经常遇到一些情况,我希望有一个3状态复选框来选择全部/取消选择我的所有视图模型。我在创建可重用的类时遇到了困难。
我尝试创建以下基类:
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转换为它的具体实现。如何重用此行为并避免强制转换?
答案 0 :(得分:1)
您可以创建一个Interface ISelectableVM
public interface ISelectableVM
{
public bool IsSelected;
}
并在派生类中实现它。
public class SelectableVM : ISelectableVM
{}
public class OtherSelectableVM : ISelectableVM
{}
然后在您的ParentVM中,您不必投射:
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
public class BaseSelectableVM
{
public bool IsSelected;
}
并从中衍生出来。
答案 1 :(得分:1)