From a0ca4955bf309c14127267a9cb5b23448f93b662 Mon Sep 17 00:00:00 2001 From: Andreas Gullberg Larsen Date: Sun, 14 Jan 2018 10:42:59 +0100 Subject: [PATCH 01/12] Add unit converter WPF sample app To illustrate how to enumerate quantities, units and to convert between them without hard coding any quantities. This sample also illustrates that there is currently need for reflection in order to enumerate units for a selected quantity, as well as getting the abbreviation for a unit, since the library does not provide the means to retrieve these generically. --- Docs/Images/logo-512.ico | Bin 0 -> 111317 bytes .../UnitConverter.Wpf/UnitConverter.Wpf.sln | 25 + .../UnitConverter.Wpf.sln.DotSettings | 2 + .../UnitConverter.Wpf/App.config | 6 + .../UnitConverter.Wpf/App.xaml | 19 + .../UnitConverter.Wpf/App.xaml.cs | 26 + .../UnitConverter.Wpf/DelegateCommand.cs | 27 + .../UnitConverter.Wpf/IMainWindowVm.cs | 27 + .../UnitConverter.Wpf/MainWindow.xaml | 79 ++ .../UnitConverter.Wpf/MainWindow.xaml.cs | 24 + .../UnitConverter.Wpf/MainWindowDesignVM.cs | 42 + .../UnitConverter.Wpf/MainWindowVM.cs | 161 +++ .../Properties/Annotations.cs | 1065 +++++++++++++++++ .../Properties/AssemblyInfo.cs | 55 + .../Properties/Resources.Designer.cs | 63 + .../Properties/Resources.resx | 117 ++ .../Properties/Settings.Designer.cs | 26 + .../Properties/Settings.settings | 7 + .../UnitConverter.Wpf.csproj | 119 ++ .../UnitConverter.Wpf/UnitPresenter.cs | 25 + .../UnitConverter.Wpf/logo-512.ico | Bin 0 -> 111317 bytes .../UnitConverter.Wpf/packages.config | 5 + .../Wpf-GenericUnitConverter.sln.DotSettings | 2 + 23 files changed, 1922 insertions(+) create mode 100644 Docs/Images/logo-512.ico create mode 100644 Samples/UnitConverter.Wpf/UnitConverter.Wpf.sln create mode 100644 Samples/UnitConverter.Wpf/UnitConverter.Wpf.sln.DotSettings create mode 100644 Samples/UnitConverter.Wpf/UnitConverter.Wpf/App.config create mode 100644 Samples/UnitConverter.Wpf/UnitConverter.Wpf/App.xaml create mode 100644 Samples/UnitConverter.Wpf/UnitConverter.Wpf/App.xaml.cs create mode 100644 Samples/UnitConverter.Wpf/UnitConverter.Wpf/DelegateCommand.cs create mode 100644 Samples/UnitConverter.Wpf/UnitConverter.Wpf/IMainWindowVm.cs create mode 100644 Samples/UnitConverter.Wpf/UnitConverter.Wpf/MainWindow.xaml create mode 100644 Samples/UnitConverter.Wpf/UnitConverter.Wpf/MainWindow.xaml.cs create mode 100644 Samples/UnitConverter.Wpf/UnitConverter.Wpf/MainWindowDesignVM.cs create mode 100644 Samples/UnitConverter.Wpf/UnitConverter.Wpf/MainWindowVM.cs create mode 100644 Samples/UnitConverter.Wpf/UnitConverter.Wpf/Properties/Annotations.cs create mode 100644 Samples/UnitConverter.Wpf/UnitConverter.Wpf/Properties/AssemblyInfo.cs create mode 100644 Samples/UnitConverter.Wpf/UnitConverter.Wpf/Properties/Resources.Designer.cs create mode 100644 Samples/UnitConverter.Wpf/UnitConverter.Wpf/Properties/Resources.resx create mode 100644 Samples/UnitConverter.Wpf/UnitConverter.Wpf/Properties/Settings.Designer.cs create mode 100644 Samples/UnitConverter.Wpf/UnitConverter.Wpf/Properties/Settings.settings create mode 100644 Samples/UnitConverter.Wpf/UnitConverter.Wpf/UnitConverter.Wpf.csproj create mode 100644 Samples/UnitConverter.Wpf/UnitConverter.Wpf/UnitPresenter.cs create mode 100644 Samples/UnitConverter.Wpf/UnitConverter.Wpf/logo-512.ico create mode 100644 Samples/UnitConverter.Wpf/UnitConverter.Wpf/packages.config create mode 100644 Samples/UnitConverter.Wpf/Wpf-GenericUnitConverter.sln.DotSettings diff --git a/Docs/Images/logo-512.ico b/Docs/Images/logo-512.ico new file mode 100644 index 0000000000000000000000000000000000000000..9a363f02a5942df41d756e2bdc427f344d8da9e2 GIT binary patch literal 111317 zcmeD^2RxPE`zuO@&*v>c9N$a`N-xJ$pFwn$HV=I+kK&-F!3=iSd+Yj0k^ zg4&Y#m9Hp=*Z6aW_>&+H5 zUYIJEF=Yv>G`#@Rb?NfaY1GQ5(n3<6b0x>8(vBY0qmokP$37}}JOjHU-F8`@>85VJ zcIU!5^e21Hm$VN*(CB^pgOgJbuKB{$ii|1CSf%LmQm#oGP-ju=n9VWUD|9XYl(Gzu zse!Nsm&!QX-M2@3ZWL)B{bHv6tlQ&0a`G{jN${9m6t?()PR_bL`kJ_i{Dh-7dV=rf ze`a1=#8`W})G^;IDn{K6_sXOyhT6?cL?y*1Z~642i_fn+qPw_`t#CPx z-TX+qvgxLFUzAIgO2=@0*e)jau_n4vA?~!jg$3VcL46@%BYr61A*qr@4NinckI}~ zwlBi9O2&Wsta(-8wH@u9T!L&@=5xF2_@1FYwxe{MfBnhX?{9*-=-a02b8PY8ahQ)Dz=d)YqSfk8&b zEp#XSfdl22E=YxyYgw<67`=W1gDjuUwy>#@A~@-^*u-U?{$Y`HvveF@2go%R@synI z$l2k*doPPE{_NQ`>Texq-`guyU*<6N@frFH4Wq`jpR8Q<+>N)^uJ(+fA(vr~(WjhK zmGLL0zt}SV^VMwKRg+G+j9z?8eM$zShEZI$dSQf{J*(_}uO(X(7jHFFsY3rkXA=sSGAC#Or?AsHMg3hV!+{q88l|5Psv(v}xBf zJa}xDTg{%aV1`CZU39qR?z>;g_i4Tgl+UKoWMyZ!p73Fl{6ppsB^zjIY5g)?H-6Z9 zb>T7hiA}SG*-my)Y00oV;a&yQ#ZERFtFNkUsJCQ^(`w`OtPU%g7#IY6T+(GlZn9?< znvZ=Ms%%B0sg~_WKTqHYb8CH3<_leZetyTUDUJPElnxh!%I zo0#)@``Ig<`CchdYffT_&j=q?&Zw{gy+6{a)l4VO%NG|pzT(iNq_)GKc6ryA@EAsh z+RcA({PR1DX}ba|+xE?zL!Wi~x=)*KnI%o~;gCI!4f(3!8ih|^?xdM6ES4VYQ`Vut zNaZV7cwoZE^i*Bl+Jem6*Ox|XZ=7{4lTCPhfo^4Dsn;gXoa~czZ`+M#uQ#*%_>m@= zvnN~PSV_E_k4szd)We7U7Ok37J{?u?`~{8^)~%tTDShrX{^^xPnNORmGmG8Sm&(=g z)65gNGKFqo!rsF8Zq?!iYb+{hn(ogOUS;rB|Dkr($4bVF6Brne)V(~t(~r@#$;DV{ z`+|t-`w0b5S{T10?)d9%Jzzh;;PCbRBdIQ(-|T)OAe)$KB~!!FA6M@eAV93zPc%icEW_J z_mZ8}JSQ3qa_bagPZob(eEwjb#r397%@3E}GnpZr!})$s^mLi&LLD>ZMa?3tPbj6| zTuIYYk42gADB0M}thl=`c#(&A*A>r1p_sz0TerRpP?fNz=e6~kD=?SSF5b8#JW@VF z40mzP6Fcb+s(@1s=^n1G8L8LlUq)uRd`hoBr>kBf9`DPRXb-o76tuqJ7ux9zKDm2AN3bpvfYZD3H74IcaM zP%EkpYG7Wy<~Z8vjvT>3yI(IC zV%(ANE^_9$gsuZ7agK`^7?21TBQ*1cU2^w-NSoC;R+G@Rccii<8)m`~v;l{PxQ|Q(ok&97?KD}D=9W{Eg zG+Nk?$ZvI}x{_i>y$HQtn~VcEtY+Ue+b931=r;31?V2YySMIAlKF5)Re$pJ{oo2$~ zD@S?xrstrymC>ZRhc#my^Y%QvsI6RGp6N$7H@SWKjOmqFxl5ozbXt(^mWgvz>dv)) z%&;%4QA|C}xe`4}3#hVdHT1BaQNrtW$`j*_{T9t#uI20J$7$4Xa5mfcuz(_&vUIL9 z1-tm^T-Iz3St5hJy`c;5Q}cDUY%7Wrb+C3@ced$ve#(|-o25mbUR{(NDBm*qnMr$@ zLtDxHLn@a%ZmrvZiqWD{GvjXwkHJc*iq>E9o%L~7=!MH(GaR{8-4!(qnm_G`v7SQP zA=UHfPK8XBUe}z%s?l|Md6!~~?-}0g{?ggjVVfYd(Q-EH){w)=sq_oa+XQp$FD}+M zFnIs&`Wt#y7M9B&KQ2SUT3o$c)^T+KQmFlc++eNx6Ep9~-#=Q#^dV*1)Tsw^x5rEQ z2)=)E`Gc#Zs^z@$nn`zCP2aSv*)Aepo>?5nYtVK-KV`{>^NUT)&gBFtx_pta_uqWy z6@R0c&X=;+ucsw5vMgtkaC`UUvywv0=?fbSTTXYit)Bk=eMWKhmAbj~lj*nCy^Yq+ zrEh9(E=zafI$Gqtymgme1I?+u5<)D>D-Vu4n5#Zx)Hs?W*|c?hXGGnN+Hbd}vE~Hs zwn93XHrLV1fKm6l^y#)#sk234msakJI9=1gV9O<`kR;~r?#`wVn-_HaiOboy8Htg_ zq0!HS-@O|>rfR;U-AY61^~_YvE&QI{l=={VQW@A=#?p$NGxALUw~lE#CIrHE?e?opQR}%OaJJsWy8$9yA|MT0xap z9yogH*u34B50$0urs*ufGKx)#_&01g_Tu(xje-Y0`!`fP_q{RCyRNt_Ml)VH|CO>r ze5F9yOUs#t=U%JjR>rGaT3Pw*wvts?=f8pXjtDM7xlM-cmeJMlcX1Et`1P-`)2)A) z%(3hF+vuu-dwfNP+Dz-#rPiEW7^+plK0CuD>-mARx>jeVsO1DcvsD(=kvL+2K8WkX zHAF+7(riZj-Sk5Bo`%|*dQ5Xfv~lN@l`h;&@1JXgwHEosnwd4#=GvSnig{P-7IJ68 z`}gmobi2p$Xcm98*%xUMrR9=pvHh?Ty{(<=W@%|o;qkF?aSfk8Gsr!69X%&iLh|I< ziL==@zk7Uvd5F@%~f2g?dVH$_U-*gWivLmy2s6Je>uLWTEe-Bmn)&|{ej?s z(FgZ!ospO;#1mKT?EF`vj?rxmzD%ja7N@b5z*IEY;GPSPG8;`d9Wh%zU^y&{PO*ubRyYj75tAM^o zqESoHvxJkMrx!-3A4;)yTbP$%b6#JGk%2`aeC`8};GNxLC*PLwpVHHFR`)?kh!zvQ z&7u!>XF54I30W@;ENU>XJM7cha%sjZucVUaCw5Wa&-5C7ZU5U3%(@x*t%aJMl?8Wh zh`JjH$oH^3HJOeW??`bkiPf><4#>TaYMLv*dx-oA*GGbjP1oxj@ZK2{5xc8(OKfb@ zhO0Yw>^M}O5$w2HW5wmmmsRSYChQ8@dsS1;B%t$b;x&d%?JDh<1a;taQw?iIQ(ChS zgIpVHYp)$XPv1T~lT_2)y#Tdg#>O{J88x;kx0yZK1d-J+E1qYvg@O{gt2@sp5se)Ix(c{iIj~plZGHXp z>TQL4^Jmkk(&RhU`7FH^IOb@=c3l*!zYT^xeF7+w3AQY-F@%4R$Qi_hF5EK z@QnC+p0G{NchM>-<%b^{l_KHlEn8bKx=qcYCSniUniFrwvn}e1&&>?Uty+ znc4@ri(-PNp7Y*fC3RnNqmi*ulluP5Ne8X$PO~;x7B|OS)Go^{ipeY%v~*zGk@tSf z%$3qlKCP#vfBN}zo{fC8`knlD^Vyl#IiB)3FOAJA)U3@tz@bvJZK>iCFB5LfMa|XK zoy>lIB5@m-!^$?`6t`^^Y3KLsER0o7m+ffL)qgJG&$8Q(P4wo<2l|f{vY^8vEJ=S0Brls*)L}nb2*`KyP%=V7k7y{)Dpy@v~^%j7Mpwp`KR#w1q)> z=F%d0(T&QQC-rMXPoAmL?U`Q*nD8ilKLg>P3a zWe8S?fAVU1e!coiF8;OXg~CeRvHr-7wHd9i#%Nvgn9a7!B02r0ZOKyyLADyTj+VNe zP2HV-Pd|z1c7K^vi)v2V?&`2M?N2#oUQ4$*)2+z%6Jrn%cvQ3Mt-CvyY3qwKcdpsm zJ`QJ*5i9aq$g9OE$d;i(8ybk;=o9bqn1J^h%qY!en!+UN`C(wA3jb zchy_Ebi$;t;P9v~nrmkWb(}0=H{gjtJp~#1PI=Vd;8vYdmUfI*>Y6mCZp}IsF_+_e zuhf;c+}o#Jn{(MG#d@EjYTKoxqYZaA-QefTtdS4fzWrp}=Sg)RPpRTGaq$Lgm)$y2 z?oj^xnLtz0w6$t!SLx|R@?zCneN!0pe7r03q==q;b6zN+N#vW-cQNn3pdg5zYz#|cU1EwtkgHe7q; zoQ|3doJOfrv&RJ4G;d zH%=KgS1CQn$j-Tw9fi80ET@#24v4!vMeiGKhvuqm7o&|&v%JIgT2Is!$tdyFe2zqI znkJlfYkgNwXZ>W_b*KZ`ROM4d+x@n^k!|noMHA*R2(Vj!{t#ZBq>lzK8fvk*i)4aYZ~>g!6|VsEZji*VuSH{nPrTOp&Bk~S!XImdc<(jBAP;SJA9u!S@uEo+O%`*iZRF8 z3+T_9j*^eP=FjTFt>jlO<6w$2+3O;?d!3O-wYWg_@g9S*l5{V)V?I7tjG;+*6C@w7 z_Lj)a7Yb_)-^g8j>fKcol60x9nWvUR5pgrwMzv5@hvjzeff+&?aaS|uwq-{c^JV68 zD8@g|D!h`gP^#y|yRLTUU^)G}{AH~CXFIr6AL^EIN>yo%S`pFBO_lSa@My|&#fxLB zK2(cltL)@stn1UZ>Y3#;QlzEF(UCJR%#s|6X*Uyw&WBa?=I0Rv5||yh*1< zrXQD9b?jue1O*ELD+ zW-oH1+9g!6kZK!Ed{3ml{)^jEOEZ<#a_5%JkP4~Gcs9dTz<8^c{0F%O3l^l`$yTAC z64{VD+B5xix&wNZCo$Om?AlQ`S*3XcajPB$Ol{kf4x*AX>r zw`B+{WUrT^X7-7EbfK|=X7YXE?i_G=C#7?rJ{&GB_-uXeO&Np?R|kSA*D!V^>&_Aux~ zgZ$Mo%%;zu32H9r%7~Lzu2oH`c<%l{OVsjuV4UEXNwZfqZ9TZlS8gK%-eY5ef4(*4CFFI*o4^QShwwQTFfake&eHa1#(Q+TNDdf z7%ePvdICR=Pd#*WVQX^<+ne1J1p`8G57pKtKYcQHwxff?oJETkIj7gn&zrOHR7UN- zf=%Y#H0;w_R;`t-zw0h7qWIxZ==4dtZ@Vn4Y`EA~9T2P)4YjkIS$CHU=b%?#ydg7p z6pc7eSA5RR+PYDDa2#>0Oic55(u4f{b@yDpyyN&AdY)^Jo{F5$)6?^~YG-z;Tzu25 zn7X27eHj|)Sk1OdQ?r&<(X2P8 zp#H|ol2v?yVfl4COcf_2rl&`7`5s~QKe69Ezm6?)rF>`LGRCSpN1wTg)Rh9;Lia?o zdd#!E@j#GyD|Xil1W|ZE__RfN>O=~Yx(@JntyxeL;b64NL2h zGnsc157P^LG_zk#ZOO|fY;m;I%-!B}qdfosdisW5$k?X^d9ocIfu@ zJFT~4Hjd#5U8$e@*sRz3v#pZz3NFX!*1Rx^+h{(vZSFc@sgQe8AD*INsGjO(G}Y8n zS6rJo+diWuS2Hvyf32~Rk^bY-XLRTb<Q2+Y;2qD>7_3&OWKC;Ps0=Gc{(dkn=ijpXQv7=1dOi>RZk-*@-i3 zUVHa&8Ly^F$JyrNnYkW@b@EB|qRiOrSKON$n{VHa=|bPv{C6y}UEEY%V=M1^wtY$G zIM&kqT&y}bX!%~H!_yf?$8|KVUNgI_9{R_x)$XlvxVJYt?YQx_WFyoDV0fY^Bqw(- z(WsqS>S4H-86)GehRnN~YaAY^zjPHoZgKyZK~v4;;H-p6pF~*XV~<`(g{|#s)a}VK zSg`iQ+q{N@69ku-Q4i;DMUxXWOR&ZjzpwSkLIuM_W@}xvE*il4KTr@R)Fr&r|J_ zn{(Fd#d7Za7sv58rq6Q@Mzde5_46c?K0JGl22eLSTw`}m*R3y3dYN=7V~W(7D+$YS z44Y~0i%M)_7`@Ylhljru^{7I0Yu9HgU!A|!_qiy?yhSp)+(sYA2gpS2>`?bc(yTwK zQ?<`O@|4fka_z@X{HLa~$od&|9BpFmqG3DWuE?$N($?X?t9Y8XvF%LO3prc>W9S#LOIBE!+_AU75>2^W4R3ybZU${P%ueYa-r^?PDZXS7C_?a@Xv z=k)Rn_ayG!9fcZu7Q7A&REVXrqvkmL_*Qwc%aTJ$CxFM=a(yeNb7GKqqXGo;W3LLDk_~^ik6;(#}ik?kw1H zbwQ5F1+)6wom9`Sajd%LbRhF_Nr{A3yY2GyoNEVoj#O8y7OUU7H(Y(A=Z+b=#nIj4 z%&|_vfb?-wY9y@QXoy{28PM>#xy;Imi$zu}hOH}Kt74v@%9Z>>E2iAH$H{tY#p7tL zF60_EuhC$NQ17{(Y~^sY-ZNSFXyxeRaR+OrmIppQ95QwNsU_SV0bbGkt5;v%IBJ~j zHBa&GqU*0mFFtQE=4NG)x_QG6f#hulRPo|HoKbqpeI;U|C zd+8m^Sv##>7SYhHK6j!hu%yIE(1fZwFz1-$Tk}j*_`0nHZ8$}P)++O050B#4ZgtOV z1uL_|=AeNX=k&&p&obXDi=Oe@I+-uhHBMh&f0as?zCnIeU}1y?pV!?ao5JkID>Yhi z3nopR=&RPc$gl3jnT;L5C4FD5E=ocO1rgC#x26H>2d=eQL-P#R}GHcm-riHM1bph|}8MjM{u zRovooGv+Q7%d<^h6L~7rq$6YA{`xnHMNR2T7P;WgPrZ}KWWeLdq<5nDQ%P1$_u&r@ zbz-reak37E1_qpmpIo})HubK`TS~N?s}kAVIA0}GE2ga`H*gu--N1{=CcB1 zCBttwhaN{G@7|&*;%~2B30F$D49K=e4DB$j;}bw5P&5lZd*yeIP3)-8ZBX&xL1SN` z55)bKkKAS-`( z^P!Vw)K@y%l-_jTx1Qr3xgp@RwlNl0nWB^|bS!+&`4GWBc~|(I-N@w>WX?OswY7@ZQl_zK5SbV@k=1_DM63R9Z|^ z?>xh&7<2KccyYVjC7Xp_%3&|98pEoA(MNIsqH%CL(Va{(K{EQ-sq7Rdx^S1*$DQJyyv{=D8)6 znVt0smuzg}J7=v92~p3xe_d0~IO$P$r$YG}UeuXhbK=!`Yq#}M_x8>zsN;rX}P=_gKLIN?MWc70(`+45UmxV8-UwM7qgmFn3Qcc)C2i`p(F zFrTX@9`qZ7cA|-V+?0oEv?}Y1mb(I>2qY89BtwKFI{<6d?NiSEgt|>7w zHBP82Yw${1D5z_9DI`SvYH;O@f+P#<%N+#Nm*<*0p|qexdrGr~94l z;YD-t=^07K)}xt$bV+Urma=T$%oTy1)FvhI-RMDd%CVb?W=J|VPCNH>r^}b;G4;}Z zS3cbEgf3Hi+HQ7*sKhd>InhS#oRKHGAH^BATAXb#b#$CNea4I(Vq%He*)upeG-Hip zpSkhzM4v8WT(ye+!lXHVNA5_^M59)m$|5&7G#6d^a9uj|_-h{Y$+@~9H#Ei77^Z99 zosO4I3(3nDJXjaoe%_i+O=5=3c&iIrgX2Yld5TM&RNbGqjomq&-Xk$>7ONwV9(!)^ zer~>nn_x(u>qMr_80S&1o7Pr#Z{-kQB>21)^`%>S3YW>qw4X{Ei{@p_M0N+fT<$yR z-rfh{`5JHRUHMGhceBcd9?s`{eM92qN4s-9(rFWYb*8>5(qTtahS#1euA3VabKtsY zLnE!{mVldU)N>pi_TN=&ZPrt9n(X zQo=N)XgoVyt>|L<91dsWg$r%DFkP6yU<+y;aqFFuJCrI zDcxtMI&G=1Jn|H0HgQ~JIB-uVXDz5 zTi67h>8^MmJ=w8}hvA8oC)4_h*+#y5U*A2ya=-egx73!lMMu)s$uT@x@oEumL0Of5 zz>Em})l|G0(N2EM`8!pnXw#2j3yXZ2Eg`4+`HS+$=PtS7=HATtTl|)rHWg6CnYy(^ z+*7zSoi(BTqVNT)yuw{lGx?5uT5Qa)Io2+8`LP|Iwi`4=9oUoa*2mw{3*PU#{?y|P zCEp|TnxZUWI~{f~Y(DBIS2b1m?G5R*j4LPPH6M&U_=p<5MVhp8Q>|+ssxr&W+%}nu z4`+U1zI2WF_*0{f;uInyHB1u(8_TnNR6Te$M#)C*+j2_p;_jH4!V07JQ=M4%;^w=g zOPpm^9H@1}{iTgr4(i8MH!YK# zbMokD$^1~|wzEa+(L3RYcBQ3lnWJ>W{_&^G!k3l4s5L%tfL?eL(<-GF^)Kb=6{(Cf zw>YmVn!gO9AW)^>4{mNwSa$Z_7RC(A^>9t}iOa9Gt zCMfI5RByo-auvye{F(R^j+m zR_Ny3C`B>iPUuJTlPt;%rN*8dx?)l)H+?@Ik+!X^esn8}=g_n^eZ%U#Jg8B9#La`2 zgF^!OkToSQRtUKfK4S-qxv812+qBV6bT-~mwrn1_Mc1V}MlmE7`fk{|%TAr6aGB{g zaEA>_)}*e*?LNHcSwyHJbsH;-@*>ZrFX(RXoE=B+&HUyF5=Krs?Y$6_CwIfb74w+$ zO+|3?eeJfGl?%zdV&pv4?myo0{dhDTy9qhx@=NSpa(hzF<{}=+P;{(j*{vq3yVq}y zci)L&{;5mo?%LICS&n1cE-|spbYc~@a%TZsYO?7PQ-}Q3D=cR-oR>^cn78cwcAT{z z*0}&p4vioEWz-`f_a+l6Q^8|J_C+T)`~6x!V`dTEFDA7g3iFd&BxWNAYTS-3;+unn z51wO2zfIu)@~#H=>;C{;ttmj!07U~74Nx>d(EvpQ6b(=`K+yn20~8HVG(gb+MFSKK zP&7c%07U~74Nx>d(EvpQ6b(=`K+yn20~8HVG(gb+MFSKK{9X-U7&aLpH^My#^$^-1 z^hFqoFcx6~1 zunHjsexC;Zi2adxIE3pEx*%*oNP$12f!}I>B;pu^iU>3RjJT9iNi^_V?2pO>yQ?59 zB`JT%+4}l=>_yfK>|yjn%-hQwyJ>$DyLQbMv$np5U9r0Q{}Qvav%k|{Sy@@Xx~QtE z{O($G;FsDT(TDfEG{OReLx#_vKVz{mG1z5`%h~!%YWFMtT>vlwon(cYW%yMgMBr{ z?qt}VP&fW2`y*3}Agmq0gvKg+&wVL^S%^&{`~nsYWfq$hh=}nF!bv@24fuRotWs(|F_RO z;ayEg|5xmfY(4>D_&~Pr?(W9yZrEeXmoiaoPxOudU$8&2`9y>;_tr1e)YM>m<@ZtS zPGtB0mFFKBd>q24ehrTfzRr1#tzXASv3)^8W!`g!>6V{8{#Ecyur(+ac>PiRB|iTT z+W%&Mdafuh$GF$fB7z;Bi z#=2r9#>L5vZ4%y$0UeXGCfMCOcd?=(a3Ad-qNAd*Et|HEs0@SIopA17u|Lup^z-xk z)82*i7e`EQ>v{Q+ugCX8NnrCt)Soo;KM%*?S@{nRZe!_CbdUw;Vp z`PJz^WPg~``3_Q3QtDB)x{M9yNyH{#5BZrO5ppcq~Deg zXxH%FyJSbaJmRtmzyAgMBZJIF_~jeJpiFCP3ns8ZXxMsUVqAd*1_pjZzPq~%^SkAT zt>IcbZ2AOU50q}(x*dD`=+QUj!@B_HrU$xbq>le1_P_Rxa(XjYu3R0qepavI!k!}^ zHDV|%EJW=IsbSOpSsR_uIDysI)e*CTZ#VqP{_Njwf253g2*2~)f_Eh2a+YD)h?|QC zD=hfd6%_oxepMfGDD`0-&wBiL0&yjXj*iBbFZ(s~mj8hLFB9v6@Eh7;L(%6z*FYPt zApfiF;eBsrYBnsI1C{l&$Coc-M*YHXeQ6^iBCsXDzz_9rwm-5pjP=wLY)(kuzI{6^ zT`(?Z#?sN49RWH!J27=NjlaV7gt`JgQ%;Uf1QzkBhlj_A^Z1wBU-=sa^k$%)PS6uM zDYWYd0Bvv06DNm7j~pI`dXGEm4-$ipw$6z1`j^{3l~{K8UH$13`W7;itpoMr>feyG zxMV>#t)bd*IM=~DKPob^k7pP&+$6kZ#CZN&?T-Xr-X}EC5Afk4SD(C`SNVNt2V*48sY#WN17hy#K}aPbbJqNVAZyGPybw6BWmLdcIB_96qE(HZ5{_818*HZ0!iD z!0Kvi(flF%ux0og?T>_n@xHId>Xmvp<6$s|M}WAvxMAyUxV9wcewbS-NAE2HTpfY& zufNp(dk8WTr<*sC*Y4T6WqTi)9@O67zD?wxv_I4teZ8;KAmDGp#5lY$u)oy)_I(EH z{ZWqQ_sMx?;2vKe2+#B%#Ky*wO^4j_NAf-xyQr+FAc%u$oz@ap@hO51=g7^L~MgDW-=o;F2 z1gJpI%}Di|$l+zA?&0SX=xfWu_!an?kW2e7v_C7sUc{;FZaK1K^zruTBjbtub;#Az z-*z9dZ_?>gT4c-h7usK{&tOD9R2I^Yt?i9IxnRzcT>kz- z`=9C)toKKKeH~fyv7)s<1c3MCzck+SBYT2hApvrcpZSljAL#sFX#Xn&xd`d2SFgyD zZFSLIMK_)^PbT5c3*{rO-zDjQS`jSP19G(8Id)~Z$O;8ag zzlXf_?SG;DzjMBZHas~xy=m{zr=RQBZONiRPPxD9p2z6DNPr_s%4Es+7ur98AQK@4 z9|&@E>f!?7eE);X7M5huAgA2lbq}m{B*5`w$H|iKU$8&KY9dFcF3w-=Z+Y2@EE?pL z`@8NTUZ-;GD0%jO@!|!c3K6Fke`HZNDiksCkeCtp4deIZ=+xfs>r%nt_>GWL_V2jo z2^#w)0J-zo1H@r7|AY1qCdfocL+*!=Wq%8_KAQmk{{Cdq_#Jj6w~YM!Jc4+boUA-q z@|Bj9^wA*tVe|*>?@q)A{%3OXQ?g_`eoU>8RAOQxSv1JC&F{GH3yMok0CHm-H8(dC zND!wwf6)FG#Eii2*QlREjy_?19Ra{^f*cxu>pi?^od^Ni+uO;CcLH%w2LQD{Xnze- zo|+mP$+8{zMiACkg74SwSj+dj>WlIb*uLODc=eLJ@ljZBJ^&o~gZ3Bgk0(wv-bs#b zVeFUy@I4@h#@~1kao@(v(~B&*V9a0u_>=Zu-XBk}?*ch?aB_0)BL^`U$f5B!-UDk? z2|#Y&5B4b;0RE)?M1jtBFCyNF-<^GC$z~>+KBO(B_1IZ~z zNKlwSqQCS{+y86FjflIQV&Y`U3b9)to(2K-$dNZzLXMtC`W~3aAOOTbAUDqCS>v+= zGX150+WxeNsZLVHu3fuMmi@s7Fo#TltmkO`9GUNuk+$d0(1Tbd4Me`o#zy3?0eghT z!v=vrYX9CgKmsX$5Ub;7^hJCvtQ#a=Kc}msM>Z{Dy1(=HZU5VSDuHL8+;z|p`vPJf z3<7_H{WbgJ57t4Ft8*vEuYEyS6F}~mDY@kj=RR1sK)inOsOmAY^hHwu)phudW?8X ztdHooKmNG=d%pqE-?D{ajg4Q1weA&SbrQyefi}6mMMKr~aIa%VvFS21GW*m3YyP;` ztRwpwfVgHufWO85UmbXfm^MFmo^1KS9#@F`0)gyEtfL*So%_2V_Ah|_g$V%l7W}^Z zyLPC@!cokNA;8~a|1pTykEHxoR#pxx_8W{NgoTBDLl)}9P<8k_u7lWi#BpDMS%^PA zoU%7<-2BbE?;8btoB1p3-}?>F|CY7?au7pzIJyA+K6&!w8`3b3vTP~iu;>nlC&InZ zK7We#4Il<*G><_zPi_i(q6`uKCi}x!z_&p$;Q)%0Io$mlS(w?dCrMv@XhAnAPoHAY z-Xd4W!@Up2xM1&TVu119;nI~5m-?pvKuo`%-+zt$d*1=Z{qTs5#ClG650E|=P`7?} zOgNaAvaz=LW{d**d$7mIaBUCYJBS%Y3Qv-rpcu;Eg;s^j{x=Ql zNyHo-98pXreeB?YLzo2m7C~&O9ot3FUSBeJp1_{aPJunb2Kd(E-@!08y^4ct#Og7~ zLp<+IEQ6teVP84_lKp$@K)-|6ji^qO8y}3+_QZLZH*$CL_$F>Bu`Y-6`#oysL;G%| z?GF5dPZ;`mea9ZGr6&H4{e$)g|FCa6ZM{-LziBwJaER?r`Wxojlnx)kAl3$P48HFa z{DTAe`T3YL`o2g@$$Vo6((;Crhc+?92_^;j=B!)0zVF$GGX6FD_r3$@kZjeY@Y=8yExhxUnrcKg+<)|kJaANC0C-;$A@fx&vZ7pSk5mX?lhH+p$`qJ3O0Vfz&i z4tu=fM?ArKVKl}Ea|EOSeH-{jk<$1V?cZAmHX#}Noy3NDz5kE92(zFmI+>nDl7`NXvUW&8Kmfv<}^NrZ>E zNU)y{vAq9_zon&i;m5;C#K&i0|KY**N%|kKKNS-6t78v|5@4=yB*qB;)_Mcu)NO73 zj^Sbu+ktJx;4#Agb^G_e17K{(oy7Eg*|xSe?2Nv_|I~W``Xlb{9(^*B{s7zmDBj(5 z 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 + True \ No newline at end of file diff --git a/Samples/UnitConverter.Wpf/UnitConverter.Wpf/App.config b/Samples/UnitConverter.Wpf/UnitConverter.Wpf/App.config new file mode 100644 index 0000000000..b50c74f35e --- /dev/null +++ b/Samples/UnitConverter.Wpf/UnitConverter.Wpf/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Samples/UnitConverter.Wpf/UnitConverter.Wpf/App.xaml b/Samples/UnitConverter.Wpf/UnitConverter.Wpf/App.xaml new file mode 100644 index 0000000000..e8a9ce3f30 --- /dev/null +++ b/Samples/UnitConverter.Wpf/UnitConverter.Wpf/App.xaml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/Samples/UnitConverter.Wpf/UnitConverter.Wpf/App.xaml.cs b/Samples/UnitConverter.Wpf/UnitConverter.Wpf/App.xaml.cs new file mode 100644 index 0000000000..c5974feadd --- /dev/null +++ b/Samples/UnitConverter.Wpf/UnitConverter.Wpf/App.xaml.cs @@ -0,0 +1,26 @@ +using System.Globalization; +using System.Threading; +using System.Windows; +using System.Windows.Markup; + +namespace Wpf_GenericUnitConverter +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + protected override void OnStartup(StartupEventArgs e) + { + // BEGIN WORKAROUND + // HACK to fix issue trying to type "1.5" in the Value textbox when bound to a decimal, since "1." is not a valid decimal value + // it will prevent you from typing that. + // We could use Delay=500 in the binding, but it feels weird to only see the updated result value some time after typing + // in a new value. + System.Windows.FrameworkCompatibilityPreferences.KeepTextBoxDisplaySynchronizedWithTextProperty = false; + // END WORKAROUND + + base.OnStartup(e); + } + } +} \ No newline at end of file diff --git a/Samples/UnitConverter.Wpf/UnitConverter.Wpf/DelegateCommand.cs b/Samples/UnitConverter.Wpf/UnitConverter.Wpf/DelegateCommand.cs new file mode 100644 index 0000000000..6cc50f6f42 --- /dev/null +++ b/Samples/UnitConverter.Wpf/UnitConverter.Wpf/DelegateCommand.cs @@ -0,0 +1,27 @@ +using System; +using System.Windows.Input; + +namespace Wpf_GenericUnitConverter +{ + public class DelegateCommand : ICommand + { + private readonly Action _commandDelegate; + + public DelegateCommand(Action commandDelegate) + { + _commandDelegate = commandDelegate; + } + + public bool CanExecute(object parameter) + { + return true; + } + + public void Execute(object parameter) + { + _commandDelegate.Invoke(); + } + + public event EventHandler CanExecuteChanged; + } +} \ No newline at end of file diff --git a/Samples/UnitConverter.Wpf/UnitConverter.Wpf/IMainWindowVm.cs b/Samples/UnitConverter.Wpf/UnitConverter.Wpf/IMainWindowVm.cs new file mode 100644 index 0000000000..ac88badae4 --- /dev/null +++ b/Samples/UnitConverter.Wpf/UnitConverter.Wpf/IMainWindowVm.cs @@ -0,0 +1,27 @@ +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Windows.Input; +using UnitsNet; +using Wpf_GenericUnitConverter.Annotations; + +namespace Wpf_GenericUnitConverter +{ + public interface IMainWindowVm : INotifyPropertyChanged + { + ReadOnlyObservableCollection Quantities { get; } + ReadOnlyObservableCollection Units { get; } + QuantityType SelectedQuantity { get; set; } + + [CanBeNull] + UnitPresenter SelectedFromUnit { get; set; } + + [CanBeNull] + UnitPresenter SelectedToUnit { get; set; } + + string FromHeader { get; } + string ToHeader { get; } + decimal FromValue { get; } + decimal ToValue { get; } + ICommand SwapCommand { get; } + } +} \ No newline at end of file diff --git a/Samples/UnitConverter.Wpf/UnitConverter.Wpf/MainWindow.xaml b/Samples/UnitConverter.Wpf/UnitConverter.Wpf/MainWindow.xaml new file mode 100644 index 0000000000..8893563805 --- /dev/null +++ b/Samples/UnitConverter.Wpf/UnitConverter.Wpf/MainWindow.xaml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +