c# - Bind Pop-Up data into a screen from which Pop-up has triggered in WPF using MVVM -
i developing wpf application using mvvm pattern in 1 of screen has datagrid , has button called add unit
in row on click of opens pop-up shown below:
(i created new view , calling view on click of addunit button).so again popup window has datagrid multiple rows shown below:
my question how can able bind row data (only 2 columns itemcode , itemname)from pop-up datagrid main window (without changing data above datagrid in main window) hope making sense or there other correct way of doing this.
i have hard-time new wpf , mvvm., appreciate.
let's make these datacontexts(popup's , grid popup opened) share same service(you can inject service these datacontexts in time created). service updated each time popup's grid selection of new row happens. in addition it(the service) raise event inform fact selection in popup grid happened , sends selected data inside eventargs. data context of grid popup opened listen shared service event , update grid itemsource collection in way like.
update
public class maingriddatacontext:baseobservableobject { private readonly ilikeeventaggregator _sharedservice; //here inject the interface public maingriddatacontext(ilikeeventaggregator sharedservice) { _sharedservice = sharedservice; //listen selection changed _sharedservice.popupgridselectionhandler += sharedserviceonpopupgridselectionhandler; } //uncomment next c'tor if don't have injection mechanism, //you should add sharedservice property app class //public maingriddatacontext() //{ // //_sharedservice = app.current. // var app = application.current app; // if (app != null) // { // _sharedservice = app.likeeventaggregator; // _sharedservice.popupgridselectionhandler += sharedserviceonpopupgridselectionhandler; // } //} private void sharedserviceonpopupgridselectionhandler(object sender, popupgriddata popupgriddata) { updategridwithapopupselecteddata(popupgriddata); } //method helps update grid, can in multiple ways private void updategridwithapopupselecteddata(popupgriddata popupgriddata) { //update datagrid here. } } public class popupdatacontext:baseobservableobject { private readonly ilikeeventaggregator _sharedservice; //here inject the interface public popupdatacontext(ilikeeventaggregator sharedservice) { _sharedservice = sharedservice; } //uncomment next c'tor if don't have injection mechanism, //you should add sharedservice property app class //public popupdatacontext() //{ // //_sharedservice = app.current. // var app = application.current app; // if (app != null) // { // _sharedservice = app.likeeventaggregator; // } //} //... logic private popupgriddata _selecteddata; //you should bind popup grid selected value property public popupgriddata selecteddata { { return _selecteddata; } set { _selecteddata = value; onpropertychanged(() => selecteddata); _sharedservice.onpopupgridselectionhandler(_selecteddata); } } //... logic } public class popupgriddata { public object popupgridselecteddata { get; set; } }
shared service code
public interface ilikeeventaggregator { event eventhandler<popupgriddata> popupgridselectionhandler; void onpopupgridselectionhandler(popupgriddata e); } public class likeeventaggregator : ilikeeventaggregator { public event eventhandler<popupgriddata> popupgridselectionhandler; public virtual void onpopupgridselectionhandler(popupgriddata e) { var handler = popupgridselectionhandler; if (handler != null) handler(this, e); } }
let me know if need more info. regards.
Comments
Post a Comment