.net - Windows Forms data binding and property path: how to handle nullability? -



.net - Windows Forms data binding and property path: how to handle nullability? -

i'm trying implement master/detail scenario mvvm pattern in windows forms project (i'm mad, know). consider next view models:

public class masterviewmodel { public bindinglist<detailviewmodel> details { get; set; } public detailviewmodel selecteddetail { { // } set { // raises selecteddetailchanged } } } public class detailviewmodel { public string subproperty { { // ... } set { // ... raises subpropertychanged } } }

i'm trying bind detailviewmodel's subproperty textbox, using next code (and property path, supported windows forms databinding):

masterviewmodel masterviewmodel; textbox textbox; // ... binding binding = new binding("text", masterviewmodel, "selecteddetail.subproperty"); binding.formattingenabled = true; binding.datasourceupdatemode = datasourceupdatemode.onpropertychanged; binding.controlupdatemode = controlupdatemode.onpropertychanged; textbox.databindings.add(binding);

it works flawlessly (like wpf!!!)... until selecteddetail null (for logic, selecteddetail null means that, in master view, nil selected). if selecteddetail null, got argumentnullexception (parameter name: component).

is there way handle nullability of "parent" property (inside navigation path)?

here exception stacktrace:

in system.componentmodel.reflectpropertydescriptor.addvaluechanged(object component, eventhandler handler) in system.windows.forms.bindtoobject.checkbinding() in system.windows.forms.bindtoobject.setbindingmanagerbase(bindingmanagerbase lmanager) in system.windows.forms.binding.setlistmanager(bindingmanagerbase bindingmanagerbase) in system.windows.forms.listmanagerbindingscollection.addcore(binding databinding) in system.windows.forms.bindingscollection.add(binding binding) in system.windows.forms.bindingcontext.updatebinding(bindingcontext newbindingcontext, binding binding) in system.windows.forms.control.updatebindings() in system.windows.forms.control.onbindingcontextchanged(eventargs e) in system.windows.forms.control.onparentbindingcontextchanged(eventargs e) in system.windows.forms.control.onbindingcontextchanged(eventargs e) in system.windows.forms.control.onparentbindingcontextchanged(eventargs e) in system.windows.forms.control.onbindingcontextchanged(eventargs e) in system.windows.forms.control.onparentbindingcontextchanged(eventargs e) in system.windows.forms.control.onbindingcontextchanged(eventargs e) in system.windows.forms.control.onparentbindingcontextchanged(eventargs e) in system.windows.forms.control.onbindingcontextchanged(eventargs e) in system.windows.forms.control.onparentbindingcontextchanged(eventargs e) in system.windows.forms.control.onbindingcontextchanged(eventargs e) in system.windows.forms.control.set_bindingcontextinternal(bindingcontext value) in system.windows.forms.containercontrol.set_bindingcontext(bindingcontext value) in system.windows.forms.containercontrol.get_bindingcontext() in system.windows.forms.control.get_bindingcontextinternal() in system.windows.forms.containercontrol.get_bindingcontext() in system.windows.forms.control.get_bindingcontextinternal() in system.windows.forms.containercontrol.get_bindingcontext() in system.windows.forms.control.get_bindingcontextinternal() in system.windows.forms.containercontrol.get_bindingcontext() in system.windows.forms.control.get_bindingcontextinternal() in system.windows.forms.control.get_bindingcontext() in system.windows.forms.control.get_bindingcontextinternal() in system.windows.forms.control.get_bindingcontext() in system.windows.forms.control.updatebindings() in system.windows.forms.control.onbindingcontextchanged(eventargs e) in system.windows.forms.datagridview.onbindingcontextchanged(eventargs e) in system.windows.forms.control.onparentbindingcontextchanged(eventargs e) in system.windows.forms.control.onbindingcontextchanged(eventargs e) in system.windows.forms.control.onparentbindingcontextchanged(eventargs e) in system.windows.forms.control.onbindingcontextchanged(eventargs e) in system.windows.forms.containercontrol.oncreatecontrol() in system.windows.forms.usercontrol.oncreatecontrol() in system.windows.forms.control.createcontrol(boolean fignorevisible) in system.windows.forms.control.createcontrol(boolean fignorevisible) in system.windows.forms.control.createcontrol(boolean fignorevisible) in system.windows.forms.control.createcontrol(boolean fignorevisible) in system.windows.forms.control.createcontrol() in system.windows.forms.control.wmshowwindow(message& m) in system.windows.forms.control.wndproc(message& m) in system.windows.forms.scrollablecontrol.wndproc(message& m) in system.windows.forms.containercontrol.wndproc(message& m) in system.windows.forms.form.wmshowwindow(message& m) in system.windows.forms.form.wndproc(message& m) ... in system.windows.forms.control.controlnativewindow.onmessage(message& m) in system.windows.forms.control.controlnativewindow.wndproc(message& m) in system.windows.forms.nativewindow.callback(intptr hwnd, int32 msg, intptr wparam, intptr lparam)

you need bindingsource provide layer of indirection.

bindingsource1 = new bindingsource(components); bindingsource1.datamember = "details"; bindingsource1.datasource = typeof(masterviewmodel); binding binding = new binding("text", bindingsource1, "subproperty"); binding.formattingenabled = true; binding.datasourceupdatemode = datasourceupdatemode.onpropertychanged; binding.controlupdatemode = controlupdatemode.onpropertychanged; textbox.databindings.add(binding);

a more detailed example: bindingsource , bindingnavigator in c# 2.0

.net winforms data-binding mvvm navigation-properties

Comments

Popular posts from this blog

iphone - Dismissing a UIAlertView -

intellij idea - Update external libraries with intelij and java -

javascript - send data from a new window to previous window in php -