<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Windows Presentation Foundation (WPF)</title><link>https://www.dotnetzone.gr:443/cs/forums/102/ShowForum.aspx</link><description>Συζήτηση σχετικά με το πώς μπορεί το WPF να δημιουργήσει οπτικά ελκυστικές εφαρμογές ώστε να βελτιώσουν το user experience.</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Master-Detail σενάριο: διαχείριση λίστας</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/69629.aspx</link><pubDate>Tue, 13 Mar 2012 16:54:52 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:69629</guid><dc:creator>Geysser</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/69629.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=102&amp;PostID=69629</wfw:commentRss><description>Φαίνεται ενδιαφερον. Για να τω ξεκοκκαλίσω λίγο...</description></item><item><title>Απ: Master-Detail σενάριο: διαχείριση λίστας</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/69627.aspx</link><pubDate>Tue, 13 Mar 2012 09:55:22 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:69627</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/69627.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=102&amp;PostID=69627</wfw:commentRss><description>Ρίξε μια ματιά σ' &lt;a href="http://www.codeproject.com/Articles/332615/WPF-Master-Details-MVVM-Application"&gt;αυτό &lt;/a&gt;το άρθο. Προτείνει την ύπαρξη ενός Cancel button που εκτελεί μια Cancel Command αν δε θέλουμε να σώσουμε τις αλλαγές. Τις original τιμές τις παίρνεις καλώντας την &lt;a href="http://msdn.microsoft.com/en-us/library/system.object.memberwiseclone.aspx"&gt;MemberwiseClone&lt;/a&gt;() (shalow copy). Νομίζω ότι σαν πρόταση είναι καλύτερη.&lt;br&gt;</description></item><item><title>Απ: Master-Detail σενάριο: διαχείριση λίστας</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/69626.aspx</link><pubDate>Tue, 13 Mar 2012 07:40:04 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:69626</guid><dc:creator>Geysser</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/69626.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=102&amp;PostID=69626</wfw:commentRss><description>Κοντά έπεσες. Περνάω το selected item σε μια μεταβλητή του ίδιου τύπου, την οποία μετά περνάω στο ViewModel της καινούριας φόρμας Detail.&amp;nbsp;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Αρχίζω με&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;MemberViewModel vm=&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;new&lt;/span&gt; MemberViewModel();&lt;/span&gt;&lt;/pre&gt;και στο Initialize() της Master φόρμας δίνω&lt;/div&gt;&lt;div&gt;&lt;span style="background-color:transparent;font-family:'Courier New';font-size:11px;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="background-color:transparent;font-family:'Courier New';font-size:11px;"&gt;vm.AddEvent+=&lt;/span&gt;&lt;span style="background-color:transparent;font-family:'Courier New';font-size:11px;color:blue;"&gt;new&lt;/span&gt;&lt;span style="background-color:transparent;font-family:'Courier New';font-size:11px;"&gt; EventHandler(vm_AddEvent);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;this&lt;/span&gt;.DataContext=vm;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;br&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/div&gt;
Το handler έχει ως εξής:&lt;div&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;void&lt;/span&gt; vm_AddEvent(Object sender,EventArgs e)
{
      DetailsDialog dlg=&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;new&lt;/span&gt; DetailsDialog();&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color:transparent;color:green;font-family:'Courier New';font-size:11px;"&gt;//Δημιουργώ ένα καινούριο παράθυρο&lt;/span&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;
      Member m=vm.MemberList[vm.SelectedIndex];&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color:transparent;color:green;font-family:'Courier New';font-size:11px;"&gt;//Παίρνω το επιλεγμένο Member&lt;/span&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;
      Member m2=&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;new&lt;/span&gt; Member();&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;			&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color:transparent;color:green;font-family:'Courier New';font-size:11px;"&gt;//Δημιουργώ ένα καινούριο Member&lt;/span&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;
      &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;//Και εδώ είναι το θέμα. Αν δώσω m2=m, στην ουσία περνάω το m και όχι&lt;/span&gt;
      &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;//ένα καινούριο Member με τις ίδιες values στις ιδιότητές του. Αν κάτσω να αντιγράψω&lt;/span&gt;
      &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;//μια προς μια τις properties, την έκατσα γιατί είναι ένα κατεβατό. Ίσως reflection?&lt;/span&gt;

      &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;//Αν λυθεί αυτό περνάω το καινούριο Member στο ViewModel του παραθύρου&lt;/span&gt;
      (dlg.DataContext &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;as&lt;/span&gt; MemberViewModel).MyMember=m2;
      &lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;//και μετά...&lt;/span&gt;
      Boolean? b=dlg.ShowDialog();
      &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;if&lt;/span&gt; (b==&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;true&lt;/span&gt;)
      {
             m=m2;     
      }
}&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font face="'Courier New'"&gt;&lt;span style="font-size:11px;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/div&gt;
Το ερώτημα είναι γιατί το κουμπί OK δεν σηκώνει το event. Σε κάποιο άλλο φόρουμ κάποιος μου είπε για IEditableObject αλλά μήτε που ξέρω πως να το χρησιμοποιήσω.</description></item><item><title>Απ: Master-Detail σενάριο: διαχείριση λίστας</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/69621.aspx</link><pubDate>Tue, 13 Mar 2012 01:33:00 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:69621</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/69621.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=102&amp;PostID=69621</wfw:commentRss><description>Δεν έχω καταλάβει εντελώς την ερώτηση, αλλά κάνεις binding του ίδιου object σε δύο φόρμες;&lt;br&gt;</description></item><item><title>Master-Detail σενάριο: διαχείριση λίστας</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/69619.aspx</link><pubDate>Mon, 12 Mar 2012 22:08:03 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:69619</guid><dc:creator>Geysser</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/69619.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=102&amp;PostID=69619</wfw:commentRss><description>Όταν έχεις ένα σενάριο με Master view και Details view, λογικό είναι να θες να διαχειρίζεσαι τις εγγραφές της λίστας στο Master: να προσθέτεις, να αλλάζεις, να διαγράφεις κλπ. Κοιτάξτε εδώ λοιπόν τι συμβαίνει:&lt;div&gt;Στο Master view υπάρχει ένα ListView με GridView, που γίνεται bind σε μια ωραία ObservableCollection. Σ'αυτό δεν φαίνονται όλες οι ιδιότητες (θα'ναι καμιά τριανταριά) αλλά μερικές μόνο.&lt;/div&gt;&lt;div&gt;Υπάρχουν δυο κουμπιά - και κάποια άλλα, αλλά δεν μας απασχολούν προς το παρόν - , Add και Edit, τα οποία κάνουν bind σε αντίστοιχες commands. Η κάθε command σηκώνει ένα event - μην ανατριχιάζετε, και τα events έχουν ψυχή! - των οποίων οι handlers βρίσκονται στο code behind της Master View.&lt;/div&gt;&lt;div&gt;To Details view έχει δύο κουμπιά , OK και Cancel, τα οποία, μέσω commands και πάλι, ρίχνουν αντίστοιχα events και επιστρέφουν το DialogResult της Details view.&lt;/div&gt;&lt;div&gt;Μέχρις εδώ,θαυμάσια. Το Add δουλεύει μια χαρά: ανοίγει το παράθυρο, κάνω τα δικά μου και, με το που πατήσω ΟΚ, κλείνει το παράθυρο και περνάει μια καινούρια γραμμή στο ListView.&lt;/div&gt;&lt;div&gt;To Edit όμως μου τα χαλάει. Όταν ανοίγει το παράθυρο και κάνω μια αλλαγή, την βλέπω κατευθείαν στο ListView από πίσω, και το κουμπί OK δεν κάνει τίποτα.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Σας κούρασα και συγνώμη. Αλλά, μπορεί κάποιο καλό παιδί να μου εξηγήσει, με όσο πιο απλό τρόπο γίνεται, γιατί συμβαίνει αυτό και πως να το λύσω;&lt;/div&gt;</description></item></channel></rss>