c# - Pass Data from Child Window to MainWindow TextBlock -


in example, mainwindow has button opens window2.

window2 has button writes "hello, world!" mainwindow textblock.

project source: https://www.dropbox.com/s/jegeguhycs1mewu/passdata.zip?dl=0

pass data


what proper way pass data window2 mainwindow?

private mainwindow mainwindow; public mainwindow mainwindow { get; private set; } public window mainwindow { get; set; } private object mainwindow { get; private set; }; private mainwindow mainwindow = ((mainwindow)system.windows.application.current.mainwindow);  this.mainwindow = mainwindow; 

mainwindow

public partial class mainwindow : window {     public mainwindow()     {         initializecomponent();     }      // open window 2     private void buttonwindow2_click(object sender, routedeventargs e)     {         window2 window2 = new window2(this);         window2.left = math.max(this.left - window2.width, 0);         window2.top = math.max(this.top - 0, 0);         window2.showdialog();     } } 

window 2

public partial class window2 : window {     private mainwindow mainwindow;      public window2(mainwindow mainwindow)     {         initializecomponent();          this.mainwindow = mainwindow;     }      // write message mainwindow     private void buttonmessage_click(object sender, routedeventargs e)     {         mainwindow.textblockmessage.text = "hello, world!";     } } 

the answer you're looking implementation-based , depends heavily on want window2 class do.


private mainwindow mainwindow; 

this acceptable.

public mainwindow mainwindow { get; private set; } 

this work doesn't respect naming conventions because it's property. you'd use encapsulation of field or easy access computed value.

public window mainwindow { get; set; } 

this not acceptable in context because window not contain textblockmessage.

private object mainwindow { get; private set; }; 

this wouldn't work same reason above.

private mainwindow mainwindow = ((mainwindow)system.windows.application.current.mainwindow); 

this work , let not keep field reference mainwindow instance in window2 instances. still needs mainwindow everytime click button however.


another interesting way you're doing pass handler child windows @ instanciation:

mainwindow

public partial class mainwindow : window {     public mainwindow()     {         initializecomponent();     }      // open window 2     private void buttonwindow2_click(object sender, routedeventargs e)     {         window2 window2 = new window2(); // no need give reference child window anymore         window2.setclickhandler((obj, ev) => {             textblockmessage.text = "hello, world!"; // direct access textblock.         });         window2.left = math.max(this.left - window2.width, 0);         window2.top = math.max(this.top - 0, 0);         window2.showdialog();     } } 

window2

public partial class window2 : window {     public window2()     {         initializecomponent();     }      public void setclickhandler(routedeventhandler handler)     {         // handler given click event.         buttonmessage.click -= handler;         buttonmessage.click += handler;     } } 

and window2 class has no need know mainwindow.


Comments

Popular posts from this blog

Is there a better way to structure post methods in Class Based Views -

performance - Why is XCHG reg, reg a 3 micro-op instruction on modern Intel architectures? -

jquery - Responsive Navbar with Sub Navbar -