Jump to content
Sign in to follow this  
MARIUSCS

Data Binding C#

Recommended Posts

Salut, am si eu o problema care ma tine pe loc de cateva zile. Ideea este ca am o tema de facut pentru facultate... este vorba de o aplicatie C# (WPF) in care trebuie folosit standardul MVVM. Pe langa asta, mai trebuie folosit si data binding, subiect care din punctul meu de vedere este destul de complex.

Astazi este a treia zi in care ma documentez despre MVVM si DataBinding si totodata a doua zi in care nu am reusit sa avansez cu nimic concret.

 

Link repo: https://bitbucket.org/WiseMarius/mediivizuale/overview

 

Mai sus am lasat link catre repo-ul proiectului. 

Ce incerc sa fac ? Am in aplicatie un obiect ListBox si un obiect Image. Aceste doua obiecte trebuie legate de: o clasa ce implementeaza ObservableCollection si o clasa simpla ce contine o proprietate formata dintr-un vector de string-uri (care reprezinta calea catre niste imagini). Daca rulati proiectul o sa vedeti ca am reusit sa leg obiectul Image de clasa ce contine calea catre imagini, dar nu stiu cat de bine e facuta treaba asta. Practic eu in main am spus this.DataContext = obiectulMeu... asta inseamna ca pentru toata fereastra eu am setat un DataContext, deci tot ce pot lega de fereastra este strict legat de obiectulMeu... asta nu ma ajuta, in sensul in care eu am nevoie sa fac legaturi si catre alt obiect.

Intrebarea mea este: de ce nu apar userii in listbox si cum as putea sa scap de chestia aia cu this.DataContext = obiectulMeu astfel incat sa nu am setat un singur DataContext pe tot MainWindow ?

 

P.S: Nu stiu daca am organizat proiectul in cel mai bun mod... nu ma consider un arhitect foarte bun.

Orice sfat e bine venit, cat timp are legatura cu intrebarile mele sau macar cu subiectul.

Multumesc anticipat !

Edited by MARIUSCS
  • Upvote 1

Share this post


Link to post
Share on other sites
On 4/18/2017 at 9:53 PM, MARIUSCS said:

Link repo: /pe privat doar

 

Mai sus am lasat link catre repo-ul proiectului. 

 

In contextul asta asteapta mult si bine.

Edited by Erase

Share this post


Link to post
Share on other sites
57 minutes ago, Erase said:

 

In contextul asta asteapta mult si bine.

Am pus inapoi link-ul... dupa cum am specificat si mai sus: este o tema, drept urmare oricare din colegii mei puteau ajunge aici, sa faca un fork si sa se aleaga cu o parte din proiect gata facuta.

Meanwhile: am reusit sa aflu care este cauza si printr-o improvizatie mi-am rezolvat si problema, insa nu sunt foarte multumit, deci astept inca un raspuns. 

Problema tine de fisierul xaml, si anume: in primul rand, nu iti gaseste proprietatile daca nu specifici un data context pentru obiectul WPF. Din cate m-am documentat in ultimele zile, acest lucru nu este foarte normal... practic tu daca ii scrii la Path calea completa, el ar trebui sa caute printre stramosi pana gaseste obiectul respectiv, de unde urmeaza sa ia proprietatea aleasa de tine. La mine nu se intampla asta...

In al doilea rand: daca setez DataContext din xaml, tot nu gaseste proprietatile (nici macar la runtime).

Care cred eu ca este problema ? Am impresia ca tine de namespace-uri, e singura explicatie pe care am reusit sa o gasesc... insa habar nu am care este legatura intre namespace-urile din xaml si namespace-urile din fisierele cs. Dupa cum am dat de inteles si mai sus... nu ma pricep la C#.

Legat de link... l-am pus inapoi pentru ca incepusem un nou proiect, era mizerie prea mare in cel vechi, asta pe langa faptul ca eu am facut o greseala imensa incepand sa lucrez la proiect cand practic eu nu am facut niciodata DataBinding (aveam doar o idee despre concept si parea simplu).

Share this post


Link to post
Share on other sites

MVVM este destul de complicat de implementat folosind WPF doar. Mai ales pentru aplicatii cat de cat complexe.

Personal prefer sa folosesct Prism (samples) pentru a simplifica lucrurile. Acum nu sunt sigur ca ai voie avand in vedere ca este o tema.

Daca am timp am sa ma uit maine peste proiect, dar nu promit nimic.

 

Si, daca imi permiti, un sfat pentru viitor: foloseste .gitignore; nu orice fisier generat in proiect trebuie sa ajunga in repo.

Edited by u0m3
  • Upvote 1

Share this post


Link to post
Share on other sites

Legat de .gitignore, scuze... eram obosit si am dat push in graba, asta e si unul dintre motivile pentru care nu m-am gandit de la inceput ca exista posibilitatea ca unii dintre colegii mei sa ajunga aici.

Apreciez recomandarea facuta de tie, insa nu sunt interesat de C#. Pe langa asta, consider ca inainte sa te apuci sa folosesti framework-uri e bine sa cunosti limbajul de programare la un nivel cat de cat acceptatil. Dupa cum vezi, eu ma lovesc cu capul de chestii destul de basic. Am sa ma uit totusi peste el, s-ar putea sa imi fie de folos pentru temele viitoare. Pana acum nu ni s-a impus decat standardul MVVM si DataBinding, deci nu ar trebui sa fie vreo problema daca cineva foloseste un framework. 

Share this post


Link to post
Share on other sites

Probabil dupa doua saptamani nu mai ajuta cu nimic, dar din nefericire nu am avut timp sa ma joc cu asta pana acum.

Am facut o implementare MVVM pe baza ce aveai tu acolo cu un Message Hub ca sa schimb View-urile.

Fiecare View e un UserControl, iar in MainWindow ai un (sau mai bine zis o serie de) DataTemplate care asociaza ViewModel-ul cu View-ul. Singura buba e ca ViewModel-ul e refolosit ceea ce nu e tocmai optim mereu.

Sper sa nu fie prea imbarligat ce am facut acolo. Daca ai nelamuriri am sa incerc sa iti explic.

 

https://bitbucket.org/radualexandrupopescu/mediivizuale-wisemarius/overview

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...