在我的应用程序中,我有很多表单,大部分都有自己绑定的模型!当然数据验证很重要,但是没有比为所有模型实现IDataErrorInfo更好的解决方案,然后编写所有属性的代码来验证它们吗?
我已经创建了验证帮助程序,删除了很多实际的验证代码,但我仍然忍不住觉得我错过了一两招!我可以补充一点,这是我使用MVVM的第一个应用程序,所以我相信我有很多关于这个主题的知识!
编辑:
这是我真正不喜欢的典型模型的代码(让我解释一下):
string IDataErrorInfo.Error
{
get
{
return null;
}
}
string IDataErrorInfo.this[string propertyName]
{
get
{
return GetValidationError(propertyName);
}
}
#endregion
#region Validation
string GetValidationError(String propertyName)
{
string error = null;
switch (propertyName)
{
case "carer_title":
error = ValidateCarerTitle();
break;
case "carer_forenames":
error = ValidateCarerForenames();
break;
case "carer_surname":
error = ValidateCarerSurname();
break;
case "carer_mobile_phone":
error = ValidateCarerMobile();
break;
case "carer_email":
error = ValidateCarerEmail();
break;
case "partner_title":
error = ValidatePartnerTitle();
break;
case "partner_forenames":
error = ValidatePartnerForenames();
break;
case …
Run Code Online (Sandbox Code Playgroud) I am using MVVM Light and have used the packaged messenger system to communicate between view models, however I have hit a bit of a dilemma! Basically when a user clicks on a customer record the corresponding view is opened and with it the CustomerViewModel is instantiated. At this point the CustomerViewModel requires the selected customers ID from the previous view model (ViewAllCustomersViewModel) so that it can get selected customers info which the view binds to (still following?). …
每次打开视图时,对每个模型属性的获取请求的数量都会增加 1。只是要清楚,如果我打开视图一次,关闭它并再次打开它,每个属性都有两个获取请求,如果设置了属性并触发了 RaisePropertyChanged("propertName") ,则再次有两个获取请求。数GET请求总是等于时代的观点已经被实例化的数量!我已经调试了这个问题的生命,一切都表明当视图关闭并且绑定被保留时,用户控件没有被处理。
我该怎么办?我已经研究过用户控件的处理,但是我没有成功找到帮助我解决这个问题的东西。也许我没有在寻找合适的主题?任何帮助或指示将不胜感激 - 谢谢!
我有一个WCF服务,它对于常规客户端 - >服务器调用非常好.但是我试图在服务中引入一个简单的回调,但它不起作用...最终我不确定我哪里出错了所以让我告诉你设置并告诉你我所知道的.
1)合同
public interface IPIRSCallbackService
{
[OperationContract]
void OnCallback();
}
[ServiceContract(CallbackContract = typeof(IPIRSCallbackService))]
public interface IPIRSService
{ etc...
Run Code Online (Sandbox Code Playgroud)
2)服务器合同实施
注意:我检查回调通道的状态,它是"打开" - 不知道这是多少值得.
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)]
class PIRSService : IPIRSService
{
public PIRSService()
{
callback = OperationContext.Current.GetCallbackChannel<IPIRSCallbackService>();
var x = ((ICommunicationObject)callback).State;
callback.OnCallback(); // HANGS HERE
}
etc.
Run Code Online (Sandbox Code Playgroud)
3)客户端 - 创建代理
现在,这可能不是您将看到的常见方式,因为我使用ViewModelLocator将服务注入到我的视图模型中...但我确信这不会导致问题...并注意到正常的服务调用工作绝对没问题.
ViewModelLocator注册服务实例
SimpleIoc.Default.Register<PIRSService>(() =>
{
IPIRSCallbackService callback = new PIRSCallbackService();
InstanceContext context = new InstanceContext(callback);
return new PIRSService(context, "PIRSClient");
}, true);
SimpleIoc.Default.Register<IPIRSService>(() =>
{
return SimpleIoc.Default.GetInstance<PIRSService>();
}, true);
Run Code Online (Sandbox Code Playgroud)
4)连接到服务 …
我有一个LINQ查询,它抓取它需要的所有数据并将其合并到一个数据传输对象中,一切正常但除非它将一个DTO的成员(这是一个char)设置为char值时抛出查询异常...
mscorlib.dll中发生了未处理的"System.ServiceModel.FaultException"类型异常
无法创建"System.Char"类型的常量值.在此上下文中仅支持基元类型或枚举类型.
请参阅下面的简化查询:
var result = (from c in db.Foster_Carers
where c.foster_carer_id == id
join fc in db.Individual_Carers on c.first_carer_id equals fc.individual_carer_id
select new FosterCarerPersonalInfoDTO
{
carer_title = fc.title,
carer_forenames = fc.forename,
carer_surname = fc.surname,
carer_gender = 'm'
}).SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)
将性别设置为'm'只是不起作用,从语法上来说它没关系,只是在执行查询时不行!可能是什么问题?
c# ×5
mvvm ×3
wpf ×3
.net ×1
callback ×1
linq ×1
linq-to-sql ×1
mvvm-light ×1
validation ×1
viewmodel ×1
wcf ×1