如何通过选中Microsoft Lightswitch中的另一个复选框来更改复选框的状态

时间:2014-06-03 13:33:24

标签: silverlight checkbox visual-studio-lightswitch

我正在尝试使用Microsoft Lightswitch构建的桌面应用程序(目前正在使用VS2013)。我有一个带有各种控件的“联系人”屏幕和隐藏该联系人的选项(而不是在将来“复活”时删除它)。我分别有一个隐藏联系人的屏幕。

我感兴趣的是如何根据另一个复选框的值更改该屏幕上一个复选框的值?

enter image description here

因此,当我将“隐藏”设置为true时,“Billing Active”和“Customer Reporting”会自动设置为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;
        }
    }

“Billing Active”复选框的名称是“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;
        }
    }

但是,如果我想在另一个屏幕中更改复选框/其他控件的值,该怎么办?如果我使用相同的方法,这部分工作,但“触发”更改的屏幕不会保存(或者似乎不保存)。

2 个答案:

答案 0 :(得分:0)

当我从头顶检查/取消选中复选框时,不确定您必须使用哪个事件/哪个被触发。 但是,在任何情况下,您都不应该对控件进行操作,也不应该对可见性进行操作。您应该更多地处理当前项的值以更改它们。 所以尝试这样的事情:

Contacts.SelectedItem.BillingActive = false;

亲切的问候 西蒙

答案 1 :(得分:0)

由于没有人回答,我会发表自己的答案。

我最初的做法是错误的 - 我想要实现的是业务逻辑的一部分,而不是屏幕逻辑。所以它应该写在实体而不是屏幕上。出于此目的,我使用_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;
            }
        }
    }