是否有任何库以Knockout JS的方式实现MVVM的ViewModel。
因此,它应该支持Computed Properties自动Dependency Tracking。
我没有找到无缝通知和验证的东西(我在Knockout JS中如何知道)。
或者,请给我一个如何做到这一点的建议。
我有自己的代码库。它甚至支持Func-validators的依赖性跟踪(我也喜欢) 所有这些都是很久以前的事情,现在它已经无法编译了。
我的意思的一些例子。
public partial class MyViewModel : ValidatableViewModel
// Some property with the validator.
public Double? LoanAmount
{
get { return _innerDataObject.LoanAmount; }
set
{
_innerDataObject.LoanAmount = value;
// Validators with dependency tracking.
PropertyChangedInSetter(new ValidatableContext("LoanAmount")
{
FuncValidators = new List<Func<ValidationResult>>
{
() =>
{
if (LoanParametersEnabled == false)
return null;
if (LoanParametersUnrequired
&& LoanAmount.HasValue == false)
return null;
if (LoanAmount.HasValue == false)
return new ValidationResult(ErrorMessages.RequiredValue);
// ...
}
},
}
);
}
}
//一些受到污染的财产。
public Double? LimitLoanProductCalculated
{
get
{
// dependency tracking for a computed property.
var res = GetComputedResult(() => GetSomeThingsForUi(
LimitLoanProductMax,
CardVariantOrNull,
LimitGlobalCalculated
));
return res;
}
}
答案 0 :(得分:3)
我写了Moldinium,它为.NET做了Knockout风格的依赖关系跟踪。
自述文件:
Moldinium允许您定义这样的类:
public abstract class Course : IModel
{
public abstract String Name { get; set; }
public abstract Room Location { get; set; }
public virtual String Description
=> $"course {Name} in room {Location.Name}";
}
public abstract class Room : IModel
{
public abstract String Name { get; set; }
}
您无需任何其他代码即可获得以下内容:
INotifyPropertyChanged
实现。Course.Description
会自动更新Course.Location
或Course.Location.Name
的更改。答案 1 :(得分:1)
我已经使用PropertyChanged.Fody多年了。它适用于自动属性和计算属性。