none
Listbox Binding IsEnabled funktioniert nicht RRS feed

  • Frage

  • Hallo,

    ich habe glaube ich ein ganz simples Problem.

    Ich habe eine View

        <Grid>
            <ListBox  ItemsSource="{Binding StudentList}"  IsEnabled="{Binding lbenabled}"   />
            <TextBox Text="{Binding selectedStudent2.StudentName, UpdateSourceTrigger=PropertyChanged}" Margin="0,259,0,0"></TextBox>
        </Grid>

    Sowie ein Viewmodel

     public class MainWindowViewModel {
    
    
            public event PropertyChangedEventHandler PropertyChanged;
    
            private ObservableCollection<Student> _studentList;
            public ObservableCollection<Student> StudentList {
                get {
                    return _studentList;
                }
                set {
                    if (_studentList != value) {
                        _studentList = value;
                        OnPropertyChanged("StudentList");
                    }
                }
            }
    
            private bool _lbenabled = true;
    
            public bool lbenabled {
                get { return _lbenabled; }
                set {
                    _lbenabled = value; OnPropertyChanged("lbenabled");
                }
            }
    
           
            private Student _selectedStudent2;
            public Student selectedStudent2 { get; set; }
          
          
          
    
            public MainWindowViewModel() {
                lbenabled = true;
                PopulateStudents();
              
                selectedStudent2 = new Student();
                selectedStudent2.PropertyChanged += test;
                
            }
            protected void test(object sender, PropertyChangedEventArgs e) {
                //test
                //string test = "";
                lbenabled = false;
    
            }
    
            private void OnPropertyChanged(string propertyName) {
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
    
            public void PopulateStudents() {
                Console.WriteLine("aus VM");
                var combolist = new ObservableCollection<ComboBoxeObject>(){
                    new ComboBoxeObject(){selectedValued= "1", values = new List<string>(){"1","2"}, Header="h1"},
                    new ComboBoxeObject(){selectedValued= "1", values = new List<string>(){"1","2"}}
                };
                var selectedvaluelist = new List<string>() { "PreTest", "Chp 1", "Test" };
                var itemList = new ObservableCollection<Student>()
                        {new Student(){StudentName="Frodo Baggins",
                                        ProjectScores=new List<decimal>() {
                                            89M,93M,88M},comboboxlist= combolist,selectedValue = selectedvaluelist},
                        new Student(){StudentName="Rosie Cotton",
                                        ProjectScores=new List<decimal>() {
                                            97M,93M,94M},comboboxlist= combolist,selectedValue = selectedvaluelist},
                        new Student(){StudentName="Samwise Gamgee",
                                        ProjectScores=new List<decimal>() {
                                            83M,90M,85M},comboboxlist= combolist,selectedValue = selectedvaluelist},
                        new Student(){StudentName="Peregrin Took",
                                        ProjectScores=new List<decimal>() {
                                            69M,72M,75M},comboboxlist= combolist,selectedValue = selectedvaluelist}};
                StudentList = itemList;
    
                var itemNameList = new List<string>() { "PreTest", "Chp 1", "Test" };
                
    
    
               
                
    
            }
        }

    Mein Objekt Student sieht so aus:

     public class Student: INotifyPropertyChanged {
            private String _StudentName;
            public String StudentName {
                get { return _StudentName; }
                set { _StudentName = value; NotifyPropertyChanged("StudentName"); }
            }
           
            
            public int StudentId { get; set; }
            public List<decimal> ProjectScores { get; set; }
            public List<string> selectedValue{ get; set; }
            public ObservableCollection<ComboBoxeObject> comboboxlist{ get; set; }
    
            public event PropertyChangedEventHandler PropertyChanged;
    
    
    
            public void NotifyPropertyChanged(string propertyName) {
                if (PropertyChanged != null) {
                    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
                }
            }
    
        } 

    So nun mein Problem.

    ich hätte einfach gerne das sich die Listbox auf IsEnabled = false stellt wenn ich unten in der Textbox was eingebe. Das Binding ist richtig. Den wenn ich im Konstruktor den Wert lbenabled = false; setze wird die listbox deaktiviert.

    Was mache ich den falsch ?

    Danke und viele Grüße

    Montag, 5. März 2012 12:12

Antworten

  • Hallo,

    muss nicht die Klasse "MainWindowViewModel" auch von INotifyPropertyChanged erben?

    Grüße

    • Als Antwort markiert liberado Dienstag, 6. März 2012 06:29
    Montag, 5. März 2012 23:30
  • Die Klasse MainWindowViewModel muss das Interface INotifyPropertyChanged implementieren, damit die Oberfläche auch weiß, dass das Ereignis auftreten kann.
     
    --
    Viele Gruesse
    Peter
    • Als Antwort markiert liberado Dienstag, 6. März 2012 06:29
    Dienstag, 6. März 2012 05:25

Alle Antworten

  • Hallo,

    muss nicht die Klasse "MainWindowViewModel" auch von INotifyPropertyChanged erben?

    Grüße

    • Als Antwort markiert liberado Dienstag, 6. März 2012 06:29
    Montag, 5. März 2012 23:30
  • Die Klasse MainWindowViewModel muss das Interface INotifyPropertyChanged implementieren, damit die Oberfläche auch weiß, dass das Ereignis auftreten kann.
     
    --
    Viele Gruesse
    Peter
    • Als Antwort markiert liberado Dienstag, 6. März 2012 06:29
    Dienstag, 6. März 2012 05:25
  • Oh man, bin ich dumm :)

    Schon zig Projekte gebautn und dann bei nem kleinen Beispiel nicht mehr weiter wissen :)

    Vielen Dank euch beiden.

    Gruß

    Dienstag, 6. März 2012 06:30