Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Silverlight ListBox από RadioButton

Îåêßíçóå áðü ôï ìÝëïò Dimitris Papadimitriou. Τελευταία δημοσίευση από το μέλος Dimitris Papadimitriou στις 30-09-2009, 23:54. Υπάρχουν 10 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  29-09-2009, 16:24 54087

    Silverlight ListBox από RadioButton

    Κοιτάξτε λίγο την παρακάτω απλή xaml:

    <ListBox Name="OptionsListBox" ItemsSource="{Binding Options}" >
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <RadioButton Content="{Binding Text}" 
                                 GroupName="test"
                                 IsChecked="{Binding IsSelected, Mode=TwoWay}">
                    </RadioButton>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

    Το binding γίνεται κανονικότατα και μάλιστα TwoWay. Το αποτέλεσμα είναι ένα List από RadioButtons bound με ένα List<Option> όπου το Option.IsSelected είναι bound με το IsChecked του RadioButton.

    Το πρόβλημά μου είναι ότι όταν γίνεται μια επιλογή ενός RadioButton, τα υπόλοιπα RadioButtons της λίστας δεν ξετσεκάρονται!

    Έχετε καμιά ιδέα γιατί;


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
    Δημοσίευση στην κατηγορία: , , ,
  •  29-09-2009, 17:11 54092 σε απάντηση της 54087

    Απ: Silverlight ListBox από RadioButton

    Το Option object σου, κάνει implement το INotifyPropertyChanged; Γιατί αν όχι, τότε το TwoWay στην πράξη είναι one way. Επίσης, έχε υπόψην ότι αν το collection από objects αλλάξει (αφαιρεθούν/προστεθούν items), δεν θα δεις την αλλαγή στο πλήθος των binded objects καθώς to List(T) δεν κάνει implement το INotifyCollectionChanged. Καλύτερα να χρησιμοποιήσεις ObservableCollection<T>

     

     


    Vir prudens non contra ventum mingit
  •  29-09-2009, 17:26 54093 σε απάντηση της 54092

    Απ: Silverlight ListBox από RadioButton

    Δεν είμαι πάνω σε υπολογιστή και τώρα που το σκέφτομαι μπορεί και πάλι να μην παίζει αυτό που σου πρότεινα... Αν δεν παίξει, δοκίμασε κάτι πιο απλό, να κάνεις bind το IsChecked πάνω στο IsSelected του item στο οποίο ανήκει, κάτι σαν το παρακάτω:

    <RadioButton Content="{Binding Text}" 
                 GroupName="test"
                 IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsSelected, Mode=TwoWay}">

    Το κόλπο είναι στο RelativeSource binding. Ελπίζω μόνο να γράφεις Silverlight 3.

     

    Vir prudens non contra ventum mingit
  •  29-09-2009, 17:32 54094 σε απάντηση της 54092

    Απ: Silverlight ListBox από RadioButton

    Ναι, κάνω implement το INotifyPropertyChanged. Και ναι, η λίστα μου δεν αλλάζει μέγεθος λόγω business requirement. Μάλιστα σκεφτόμουν να την κάνω array για να μην δίνει λάθος εντύπωση.

    Τι στο καλό γίνεται;!

    edited: Όχι, δεν βοήθησε ούτε η δεύτερη πρόταση.


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  29-09-2009, 17:46 54096 σε απάντηση της 54094

    Απ: Silverlight ListBox από RadioButton

    Προσέχοντας τον κώδικα που κάνω raise το PropertyChanged event, όντως λειτουργεί σωστά και ακριβώς μετά γίνεται hit και ο getter του property που σημαίνε ότι το UI πιάνει το PropertyChanged και ζητάει την τιμή του ενημερωμένου property.

    Οπότε το πρόβλημα που παραμένει είναι γιατί δεν γίνονται uncheck τα υπόλοιπα radiobuttons, εφόσον ανήκουν στο ίδιο group.


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  29-09-2009, 18:23 54098 σε απάντηση της 54096

    Απ: Silverlight ListBox από RadioButton

    Αυτό που λες είναι αλήθεια, όταν το περιεχόμενο του listbox είναι στατικό. Κατά το databinding χάνεται η πληροφορία του group και γι αυτό συμβαίνει αυτό. Είσαι σίγουρος ότι δεν παίζει η δεύτερη λύση; Διαφορετικά μόλις βρω λίγο χρόνο θα ανοίξω ένα Silverlight 2 project που έχω υλοποιήσει κάτι τέτοιο αλλά είναι κομματάκι περίπλοκο με τα διάφορα templates.


    Vir prudens non contra ventum mingit
  •  29-09-2009, 18:57 54100 σε απάντηση της 54098

    Απ: Silverlight ListBox από RadioButton

    Σ' εμένα παίζει χωρίς πρόβλημα! Έφτιαξα ένα project σε Silverlight 3, με το ListBox όπως στο πρώτο παράδειγμα και στο code behind:

        public partial class MainPage : UserControl
        {
            public List<Option> Options
            {
                get; 
                set;
            }
            public MainPage()
            {
                FillOptions();
                InitializeComponent();
                OptionsListBox.DataContext = this;
            }
    
            public void FillOptions()
            {
                Options=new List<Option>();
                Options.Add(new Option{Text="aaa",IsSelected=false});
                Options.Add(new Option { Text = "bbb", IsSelected = true });
                Options.Add(new Option { Text = "ccc", IsSelected = false });
            }
        }

    Η Option είναι η παρακάτω

        public class Option:INotifyPropertyChanged
        {
            private string _Text;
            public string Text
            {
                get { return _Text;} 
                set { _Text = value;
                    NotifyPropertyChanged("Text");
                } 
            }
    
            private bool _IsSelected;
            public bool IsSelected
            {
                get { return _IsSelected; }
                set { _IsSelected = value;
                    NotifyPropertyChanged("IsSelected");
                }
            }
    
            public event PropertyChangedEventHandler PropertyChanged;
    
            public void NotifyPropertyChanged(string propertyName)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this,
                        new PropertyChangedEventArgs(propertyName));
                }
            }
    
        }

    Τα radio buttons μου παίζουν κανονικά. Παίζαν κανονικά και όταν δοκίμασα με OneWay binding, και χωρίς INotifyPropertyChanged, και με ObservableCollection. Στο τέλος τα μετέτρεψα όλα έτσι ώστε να είναι όσο το δυνατόν πιο κοντά στο παράδειγμα του Δημήτρη και τα Radiobuttons δουλεύουν πάντα σωστά.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  29-09-2009, 19:11 54101 σε απάντηση της 54100

    Απ: Silverlight ListBox από RadioButton

    Την πάτησα σαν αρχάριος και δεν ανέφερα ότι δουλεύω με Silverlight 2. Στο 2 κάνοντας copy/paste την XAML που γράφω και τον κώδικα του Παναγιώτη δεν παίζει! Μάλλον θα το αφήσω έτσι και θα γίνει fix by update μόλις κάνω το upgrade.

    thanks!


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  29-09-2009, 19:20 54103 σε απάντηση της 54101

    Απ: Silverlight ListBox από RadioButton

    Το έψαξα στο connect και βρήκα το εξής: RadioButton GroupName not rendered in GridView

    Δεν ξέρω αν αυτό που λέει ισχύει και για το ListBox: Each row in a GridView is its own naming container so the controls' names don't collide. However, RadioButtons do not support spanning multiple naming containers and having their groupname attribute still work correctly. We will be looking at solving the RadioButton GroupName/multiple naming container issue in future versions of the product.

    Έχει και ένα workaround σε ένα link που είναι broken.

    Καλά άσχετο! Αυτό είναι για ASP.NET!


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  29-09-2009, 19:35 54104 σε απάντηση της 54101

    Απ: Silverlight ListBox από RadioButton

    Βρε! Και σε ρώτησα σε τι SL παίζεις!


    Vir prudens non contra ventum mingit
  •  30-09-2009, 23:54 54156 σε απάντηση της 54104

    Απ: Silverlight ListBox από RadioButton

    Και βέβαια στο Silverlight 3 μου παίζει... έτσι απλά!
    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems