我正在尝试使用Microsoft Lightswitch构建的桌面应用程序(当前与VS2013一起使用)。我有一个带有各种控件的“联系人”屏幕,以及一个隐藏该联系人的选项(而不是在将来“复活”的情况下将其删除)。我分别在屏幕上隐藏了联系人。
我感兴趣的是如何根据另一个复选框的值更改该屏幕上一个复选框的值?
因此,当我将“隐藏”设置为true时,“开票有效”和“客户报告”将自动设置为false。
到目前为止,我有以下内容:
partial void Contact_Changed()
{
// Write your code here.
this.FindControl("Hidden").ControlAvailable += Customer_Hidden;
this.SetDisplayNameFromEntity(this.Customer);
}
private void Customer_Hidden(object sender, ControlAvailableEventArgs e)
{
CheckBox p = e.Control as CheckBox;
bool ap = p.IsChecked.Value;
//bool p = System.Convert.ToBoolean(e);
switch (ap)
{
case true:
this.FindControl("ContractActive").IsVisible = false;
break;
case false:
this.FindControl("ContractActive").IsVisible = true;
break;
}
}
“结算有效”复选框的名称为“ ContractActive”
这并没有完成任何事情。事情的整个目的是一种验证,即一旦您摆脱了某个人,别忘了将他从其他所有事物中排除:)我还可以显示带有警告或其他内容的模式窗口弹出窗口,但首先我很感兴趣在那个也许微不足道的问题中。
提前致谢!
编辑:找到了在相同屏幕上时如何控制复选框的方法:
partial void CustomerDetail_Created()
{
Dispatchers.Main.BeginInvoke(() => ((INotifyPropertyChanged)this.Customer).PropertyChanged += PropertyChanged);
}
private void PropertyChanged(object sender, PropertyChangedEventArgs e)
{
switch (Customer.Hidden)
{
case true:
this.Customer.Hidden = true;
this.Customer.BillingActive = false;
break;
case false:
this.Customer.Hidden = false;
this.Customer.BillingActive = true;
break;
}
}
但是,如果我想在另一个屏幕上更改复选框/其他控件的值,该怎么办?如果我使用相同的方法,则此方法部分起作用,但是“触发”更改的屏幕未保存(或似乎未保存)。
由于没有人要回答,因此我将发布自己的答案。
我最初的方法是错误的-我想要实现的是业务逻辑的一部分,而不是屏幕逻辑。因此,应将其写在实体中而不是屏幕中。为此,我将_Changed方法与应该更改的属性一起使用:
partial void Hidden_Changed()
{
foreach (Instance inst in this.Instances)
{
if (Hidden.Equals(true))
{
inst.UseForBilling = false;
this.BillingActive = false;
}
else
{
inst.UseForBilling = true;
this.BillingActive = true;
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句