C# 如何从父页面触发用户控件的更新事件?需要帮忙吗?

C# 如何从父页面触发用户控件的更新事件?需要帮忙吗?,c#,asp.net,C#,Asp.net,我有一个带有一些公司信息的FormView,我称之为Company\u FormView,它有一个嵌入式地址用户控件本身,还有一个FormView,我称之为FormView\u UC\u address。对于用户来说,它是一个单一的无缝页面,用于更新公司信息。我只想显示一个更新按钮,如果单击该按钮,将同时更新嵌入其中的公司\u FormView以及FormView\u UC\u地址。我已选择仅使公司表单视图更新按钮可见。但是,当单击“公司”FormViewparent页面按钮时,如何让FormV

我有一个带有一些公司信息的FormView,我称之为Company\u FormView,它有一个嵌入式地址用户控件本身,还有一个FormView,我称之为FormView\u UC\u address。对于用户来说,它是一个单一的无缝页面,用于更新公司信息。我只想显示一个更新按钮,如果单击该按钮,将同时更新嵌入其中的公司\u FormView以及FormView\u UC\u地址。我已选择仅使公司表单视图更新按钮可见。但是,当单击“公司”FormViewparent页面按钮时,如何让FormView\u UC\u Address的CommandName=Update启动

所以我的问题有两个:

我在下面的正确轨道上吗

2如果是这样的话,我就陷入了下一步该做什么来解决我遇到的错误的困境,见下文

我就是这样做的。在公司表单查看页面上

        protected void FV_Company_ItemCommand(object sender, FormViewCommandEventArgs e)
    {
        if (e.CommandName == "Update")
        {
            Revlo.User_Controls.UC_Address myUCAddress = (Revlo.User_Controls.UC_Address)FV_Company.FindControl("UC_Address1");
            Button btn_UCAddressUpdate = (Button)myUCAddress.FindControl("btn_UCAddressUpdate");  //<<<<------------------------  Is showing null, So it's not finding it

            btn_UCAddressUpdate.Click += new EventHandler(btn_UCAddressUpdate_Click); //<<<---------------- Getting a message that this does not exist in current context

        }
    }
提前感谢

对于复杂的类依赖关系,我使用发布-订阅模式:

视图模型:

窗口:

您可以利用它来获取MessageBus

消息总线

}

订阅


我不确定您的方法是否正确,但在这种情况下我不会使用FormView。
    public class ViewModel : ViewModelBase
    {
        public ViewModel()
        {
            CloseComand = new DelegateCommand((obj) =>
                {
                    MessageBus.Instance.Publish(Messages.REQUEST_DEPLOYMENT_SETTINGS_CLOSED, null);
                });
        }
}
public partial class SomeWindow : Window
{
    Subscription _subscription = new Subscription();

    public SomeWindow()
    {
        InitializeComponent();

        _subscription.Subscribe(Messages.REQUEST_DEPLOYMENT_SETTINGS_CLOSED, obj =>
            {
                this.Close();
            });
    }
}
public class MessageBus
{
    #region Singleton
    static MessageBus _messageBus = null;
    private MessageBus() { }

    public static MessageBus Instance
    {
        get
        {
            if (_messageBus == null)
            {
                _messageBus = new MessageBus();
            }

            return _messageBus;
        }
    }
    #endregion

    #region Members
    List<Observer> _observers = new List<Observer>();
    List<Observer> _oneTimeObservers = new List<Observer>();
    List<Observer> _waitingSubscribers = new List<Observer>();
    List<Observer> _waitingUnsubscribers = new List<Observer>();

    int _publishingCount = 0;
    #endregion

    public void Subscribe(string message, Action<object> response)
    {
        Subscribe(message, response, _observers);
    }

    public void SubscribeFirstPublication(string message, Action<object> response)
    {
        Subscribe(message, response, _oneTimeObservers);
    }

    public int Unsubscribe(string message, Action<object> response)
    {
        var observers = new List<Observer>(_observers.Where(o => o.Respond == response).ToList());
        observers.AddRange(_waitingSubscribers.Where(o => o.Respond == response));
        observers.AddRange(_oneTimeObservers.Where(o => o.Respond == response));

        if (_publishingCount == 0)
        {
            observers.ForEach(o => _observers.Remove(o));
        }

        else
        {
            _waitingUnsubscribers.AddRange(observers);
        }

        return observers.Count;
    }

    public int Unsubscribe(string subscription)
    {
        var observers = new List<Observer>(_observers.Where(o => o.Subscription == subscription).ToList());
        observers.AddRange(_waitingSubscribers.Where(o => o.Subscription == subscription));
        observers.AddRange(_oneTimeObservers.Where(o => o.Subscription == subscription));

        if (_publishingCount == 0)
        {
            observers.ForEach(o => _observers.Remove(o));
        }

        else
        {
            _waitingUnsubscribers.AddRange(observers);
        }

        return observers.Count;
    }

    public void Publish(string message, object payload)
    {
        _publishingCount++;

        Publish(_observers, message, payload);
        Publish(_oneTimeObservers, message, payload);
        Publish(_waitingSubscribers, message, payload);

        _oneTimeObservers.RemoveAll(o => o.Subscription == message);
        _waitingUnsubscribers.Clear();

        _publishingCount--;
    }

    private void Publish(List<Observer> observers, string message, object payload)
    {
        Debug.Assert(_publishingCount >= 0);

        var subscribers = observers.Where(o => o.Subscription.ToLower() == message.ToLower());

        foreach (var subscriber in subscribers)
        {
            subscriber.Respond(payload);
        }
    }

    public IEnumerable<Observer> GetObservers(string subscription)
    {
        var observers = new List<Observer>(_observers.Where(o => o.Subscription == subscription));
        return observers;
    }

    public void Clear()
    {
        _observers.Clear();
        _oneTimeObservers.Clear();
    }

    #region Helpers
    private void Subscribe(string message, Action<object> response, List<Observer> observers)
    {
        Debug.Assert(_publishingCount >= 0);

        var observer = new Observer() { Subscription = message, Respond = response };

        if (_publishingCount == 0)
        {
            observers.Add(observer);
        }
        else
        {
            _waitingSubscribers.Add(observer);
        }
    }
    #endregion
}
public class Subscription
{
    #region Members
    List<Observer> _observerList = new List<Observer>();
    #endregion

    public void Unsubscribe(string subscription)
    {
        var observers = _observerList.Where(o => o.Subscription == subscription);

        foreach (var observer in observers)
        {
            MessageBus.Instance.Unsubscribe(observer.Subscription, observer.Respond);
        }

        _observerList.Where(o => o.Subscription == subscription).ToList().ForEach(o => _observerList.Remove(o));
    }

    public void Subscribe(string subscription, Action<object> response)
    {
        MessageBus.Instance.Subscribe(subscription, response);
        _observerList.Add(new Observer() { Subscription = subscription, Respond = response });
    }

    public void SubscribeFirstPublication(string subscription, Action<object> response)
    {
        MessageBus.Instance.SubscribeFirstPublication(subscription, response);
    }
}