【问题标题】:List of events in Silverlight?Silverlight 中的事件列表?
【发布时间】:2012-09-02 11:16:00
【问题描述】:

我有 3 个控件 - ContractSelection、ContractInfo 和 ContractClips

我有一个额外的类 - ContractStructureService。这包含一个属性 - SelectedContract

合同选择控件在组合框中向用户显示合同列表

当用户选择合同时,服务上的 SelectedContract 会发生变化。

我知道如何做所有这些 - 棘手的一点是,我希望在所选合同发生更改时同时告知 ContractInfo 和 ContractClips

public class FlexContractStructureService : IFlexContractStructureService
{

    #region IFlexContractStructureService Members

    private Contract _selectedContract;

    public ViewModels.Contract SelectedContract
    {
        get { return _selectedContract; }
        set
        {
            _selectedContract = value;
            OnSelectedContractChanged(new SelectedContractChangedEventArgs(SelectedContract));
        }
    }

    public event EventHandler SelectedContractChanged;

    protected virtual  void OnSelectedContractChanged(SelectedContractChangedEventArgs e)
    {
        if (SelectedContractChanged != null)
        {
            SelectedContractChanged(this, e);
        }

    }

如何使用 Silverlight 做到这一点?

我假设如果我在 ContractInfo 和 ContractClipInfo 中都有代码,例如

service.SelectedContractChanged += ContractChanged

这是否意味着当我调用 OnSelectedContract 发生变化时,只通知 1 个对象?

保罗

【问题讨论】:

    标签: silverlight silverlight-5.0


    【解决方案1】:

    这里有几个问题合二为一。

    对于最后一部分,event 意味着是多播的,即能够通知代表列表。所以,不,不仅通知了 1 个对象。

    现在,对于主要问题,在 Silverlight 中,您有多种选择,具体取决于您已经在使用什么:

    • 如果您可以获得对相关对象的直接引用,则可以按照您的建议使用事件和委托。这会导致可能不需要的耦合,并且还会带来泄漏/委托垃圾邮件的风险。这意味着:您必须非常小心地取消订阅添加到事件中的每个委托。

    • 您可以使用非耦合通信模式,例如Messenger(MVVM Light)或类似的东西(广播公司/订阅者)。您在这里有一个广播点:OnSelectedContractChanged,您可以在其中发送通知(再次在 MVVM Light 中:Messenger.Default.Send(new SelectedContractChangedNotification(_selectedContract));)。您可以在应用程序的任何其他位置 (Messenger.Default.Register<SelectedContractChangedNotification>(this, OnSelectedContractChanged);) 接收此通知,接收者数量不限。

    【讨论】:

      猜你喜欢
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多