Silverlight中的活动列表?

时间:2012-09-02 11:16:01

标签: silverlight silverlight-5.0

我有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 个答案:

答案 0 :(得分:1)

这里有几个问题。

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

现在,对于主要问题,在Silverlight中,您有几种选择,具体取决于您已经使用的内容:

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

  • 您可以使用非耦合通信模式,例如Messenger(MVVM Light)或类似的东西(广播/订阅者)。你在这里有一个广播点:OnSelectedContractChanged你可以在那里发送通知(再次在MVVM Light中:Messenger.Default.Send(new SelectedContractChangedNotification(_selectedContract));)。您可以在应用程序的其他地方(Messenger.Default.Register<SelectedContractChangedNotification>(this, OnSelectedContractChanged);)随时随地接收此通知,并且您可以根据需要使用尽可能多的接收器。