C# 从儿童开始装订

C# 从儿童开始装订,c#,silverlight,silverlight-4.0,C#,Silverlight,Silverlight 4.0,嗨,我想传递文本框QuantidaDeHoras.Text;datahorado.SelectedDate;correto.Desenvolvedor(从childwindow)到主页中名为datagridhorastotais的网格,但我无法将itemsource设置为“teste”表单子窗口。。。有什么想法吗?这是childwindow的代码 public partial class ChildWindow2 : ChildWindow, INotifyPropertyChange

嗨,我想传递文本框QuantidaDeHoras.Text;datahorado.SelectedDate;correto.Desenvolvedor(从childwindow)到主页中名为datagridhorastotais的网格,但我无法将itemsource设置为“teste”表单子窗口。。。有什么想法吗?这是childwindow的代码

     public partial class ChildWindow2 : ChildWindow, INotifyPropertyChanged
{
    public class Horas : INotifyPropertyChanged
    {
        private string quantidadehoras;
        private DateTime? datahora;
        private string desenvolvedor;

        public string Quantidadehoras
        {
            get
            {
                return quantidadehoras;
            }
            set
            {
             quantidadehoras = value;
                NotifyPropertyChanged("Quantidadehoras");
            }
        }


        public DateTime? Datahora
        {
            get
            {
                return datahora;
            }

            set
            {
                datahora = value;
                NotifyPropertyChanged("DataHora");
            }
        }
        public string Desenvolvedor
        {
            get
            {
                return desenvolvedor;
            }
            set
            {
                desenvolvedor = value;
                NotifyPropertyChanged("Desenvolvedor");
            }
        }
        #region
        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }

        public class Horas2 : ObservableCollection<Horas>
        {
            public Horas2()
            {
            }
        }
    }


    #endregion
    public ChildWindow2()
    {
        InitializeComponent();
    }

    public class quadrodehorarios : ObservableCollection<ChildWindow2>, INotifyPropertyChanged

  {

    }
    private void OKButton_Click(object sender, RoutedEventArgs e)
    {

        Horas2 teste= new Horas2();
        Horas correto = new Horas();
        correto.Quantidadehoras = textboxquantidadehoras.Text;
        correto.Datahora = datahorado.SelectedDate;
        correto.Desenvolvedor =textboxDesenvolvedor.Text;
        this.DialogResult = true;

    }

    private void CancelButton_Click(object sender, RoutedEventArgs e)
    {
        this.DialogResult = false;
    }

    private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {

    }

    private void textboxqtdhoras_TextChanged(object sender, TextChangedEventArgs e)
    {

    }
}
公共部分类ChildWindow2:ChildWindow,INotifyPropertyChanged
{
公共类Horas:INotifyPropertyChanged
{
私有字符串量化存储;
私有日期时间?数据时间;
私有字符串desenvolvedor;
公共字符串量化
{
得到
{
返回量的大小;
}
设置
{
quantidadehoras=数值;
NotifyPropertyChanged(“Quantidadehoras”);
}
}
公共日期时间?数据时间
{
得到
{
返回数据时间;
}
设置
{
datahora=值;
NotifyPropertyChanged(“DataHora”);
}
}
公共字符串Desenvolvedor
{
得到
{
返回desenvolvedor;
}
设置
{
desenvolvedor=值;
NotifyPropertyChanged(“Desenvolvedor”);
}
}
#区域
公共事件属性更改事件处理程序属性更改;
私有void NotifyPropertyChanged(字符串propertyName)
{
如果(PropertyChanged!=null)PropertyChanged(这是新的PropertyChangedEventArgs(propertyName));
}
公共类2:可观察集合
{
公共图书馆2()
{
}
}
}
#端区
公共儿童窗口2()
{
初始化组件();
}
公共类quadrodehorarios:ObservableCollection,InotifyProperty已更改
{
}
私有无效确认按钮\单击(对象发送者,路由目标e)
{
Horas2 teste=新的Horas2();
Horas correto=新的Horas();
correto.Quantidadehoras=textboxquantidadehoras.Text;
correto.Datahora=datahorado.SelectedDate;
correto.Desenvolvedor=textboxDesenvolvedor.Text;
this.DialogResult=true;
}
私有作废取消按钮\u单击(对象发送方,路由目标)
{
this.DialogResult=false;
}
private void comboBox1\u SelectionChanged(对象发送方,SelectionChangedEventArgs e)
{
}
私有void textboxqtdhoras_TextChanged(对象发送者,textchangedventargs e)
{
}
}

}

如果我明白你想做什么。。。您可以使用中介模式(如事件聚合器)将事件(数据选择)从子窗口传递到父窗口。这是一个。

今晚,我正在为我的书准备关于“事件聚合器”模式的章节,我开始收集我对这个主题的想法。如果你觉得你必须就这一章发表评论并给我免费建议,那么我想你应该这样做(请)。我以前在这里和这里都写过这种模式。我还引用了一些我还没有写太多的其他模式。沃德·贝尔和约翰·爸爸都在博客上写了这些模式。明天晚上我将在博客上发布我的StoryTeller实现

如果您是该模式的新手,事件聚合器对象将:

将事件从多个对象传递到单个对象,以简化客户端的注册

本质上,它是GoF中介模式的一种特殊形式。它是应用程序中的“中心”对象,可用于在应用程序的不同部分之间执行解耦的“发布/订阅”消息传递。我在WinForms应用程序中使用了该模式,在StoryTeller中使用了WPF,甚至在web页面中使用了JavaScript(这对于我们在工作中为web应用程序实现仪表板模式非常重要)

以下是我对模式的看法:

注册。必须有人负责向事件聚合器中心注册侦听器。 您可以让侦听器自己通过依赖事件聚合器来进行注册,就像Prism惯用的那样。这是非常好的,因为当查看一个类时,无论它是否注册为侦听器,这都是显而易见的。我不喜欢这种方法,因为我认为这样做很尴尬,会给每个监听器添加重复的代码——重复的代码应该在弹出的任何地方都去掉。 您可以使用另一个对象,如“Screen Activator”(稍后将详细介绍此模式),将ViewModels/Presenter、screens或非UI元素注册为侦听器。这样做的好处是,可以免除执行实际工作的类(ViewModel/Presenter/service)的引导责任。 这实际上只是2a,但是您可以使用一个自定义的“Registry”类在一个地方进行显式订阅。我喜欢 使用IoC工具的常规注册,根据需要自动将对象添加到事件聚合器中。我在StoryTeller中使用一个marker接口和一个StructureMap“拦截器”来完成这项工作。这在机械上是“最简单”的,但在理解各部分如何连接方面增加了一些开销。但是,还有一个大问题,约定是黑魔法,而不是显式代码。
可发现性/可追溯性。事件聚合器是间接寻址的一种形式,间接寻址几乎总是使系统更难理解。在某些时候,您肯定需要了解哪些对象正在发布,哪些对象正在接收事件。强类型事件在这里是一个福音,因为使用高级IDE功能(如R#的“查找用法”)来快速确定特定类型事件的发布者和订阅者相对容易。CAB中的事件聚合器模拟依赖于字符串键和mad