wpf controls - WPF "partial forms" -


i'm making application db migrations. made multithreaded framework wpf gui. put someting in namespace/folder:

class : migrator {     public override run(){         //i need         string valueofmycustomfieldonform = xyz.text; //example          int count = 500;         for(int = 0; < 500; i++){             //do here             onprogresschanged(...); //call event, gui updated         }         oncompleted(...); //migration completed     } } 

then using reflection put classes in namespace onto dropdown list. when choose 1 in list , click start, thread code in run method started.

db host: textbox db username: textbox db password: textbox -- migrator custom field 1: textbox migrator custom field 2: textbox ... -- list migrated items - irrelevant 

there few commong field on gui (like database host, username etc...). of migrators need custom fields on gui (for example 3 textbox fields). best way in wpf? need part of gui dynamic.

there's lot of seemingly-irrelevant information in question, - think - mechanisms creating metadata-driven uis in wpf. here's way approach problem:

suppose want build property-sheet-like ui: grid displays row each property, prompt , input control of kind. this, you're going need collection of objects, each item in collection including properties describe property , value. simple design class exposes prompt property , value property , implements change notification.

once have created , populated collection, can implement itemscontrol displays in grid:

<itemscontrol itemssource="{binding properties}" grid.issharedsizescope="true">    <itemscontrol.itemtemplate>       <datatemplate datatype="propertyviewmodel">          <grid>             <grid.columndefinitions>                <columndefinition sharedsizegroup="prompt"/>                <columndefinition sharedsizegroup="value"/>                                </grid.columndefinition>             <grid.rowdefinitions>                <rowdefinition/>             </grid.rowdefinitions>          </grid>          <label content="{binding prompt}"/>          <textbox grid.column="1" text="{binding value, mode=twoway}"/>       </datatemplate>    </itemscontrol.itemtemplate> </itemscontrol> 

this pretty simple - complicated thing using grid.issharedsizescope of grids control creates use same column widths. use listview instead of itemscontrol, though using listview introduces bunch of issues surrounding focus , selection may not want deal with.

note because of magic wpf template matching, conceivably implement value property object, , create different templates handle different possible types of value property - real property sheet does. this, you'd create template each type, e.g.:

<datatemplate datatype="{x:type system:string}">    <textbox text="{binding value, mode=twoway}"/> </datatemplate> <datatemplate datatype="{x:type system:datetime}">    <datepicker value="{binding value, mode=twoway}"/> </datatemplate> 

etc. you'd change template propertyviewmodel instead of showing value in textbox, uses contentpresenter, e.g.:

<contentpresenter grid.column="1" content="{binding}"/> 

Comments

Popular posts from this blog

apache - Add omitted ? to URLs -

redirect - bbPress Forum - rewrite to wwww.mysite prohibits login -

php - How can I stop spam on my custom forum/blog? -