2017-07-01 1 views
0

Ich habe ein kleines Problem mit einer ListBox und seine Bindung. Alles ist gut, außer wenn ich die Funktion LstExtensionUnSelectAll() aufrufen, weil nichts geändert, die Checkbox erneut überprüft werden.WPF Binding Object

Ich denke, es ist eine dumme Sache, aber ich sehe es nicht.

<ListBox ItemsSource="{Binding LstExtension, Mode=TwoWay}" Grid.Row="0"> 
    <ListBox.ItemTemplate> 
     <HierarchicalDataTemplate> 
      <CheckBox Content="{Binding Extension}" IsChecked="{Binding Checked}"/> 
     </HierarchicalDataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Hier ist es die Aufgabe LstExtension:

public class CustomExtensions 
{ 
    public string Extension { get; set; } 
    public bool Checked { get; set; } 

    public CustomExtensions(string ext) 
    { 
     Extension = ext; 
     Checked = true; 
    } 
} 

private List<CustomExtensions> _LstExtension; 
public IEnumerable<CustomExtensions> LstExtension 
{ 
    get { return _LstExtension; } 
    set 
    { 
     if (value != _LstExtension) 
     { 
      _LstExtension = value.ToList(); 
      NotifyPropertyChanged("LstExtension"); 
     } 
    } 
} 

internal void LstExtensionUnSelectAll() 
{ 
    _LstExtension?.ForEach(c => c.Checked = false); 
    NotifyPropertyChanged("LstExtension"); 
} 
+0

Warum haben Sie 'NotifyPropertyChanged (" Checked ") nicht hinzugefügt;' in 'Checked' Eigenschaft? – ASh

+0

Als Hinweis ist es sinnvoll, 'Mode = TwoWay 'für die ItemsSource-Bindung zu setzen. – Clemens

Antwort

0

Sie benötigen, um Ihre CustomExtensions Klasse aktualisieren INotifyPropertyChanged zu verwenden, so dass Checked das Ereignis auslöst, wenn sich der Wert ändert.

public class CustomExtensions : INotifyPropertyChanged 
{ 
    public string Extension { get; set; } 

    private bool _checked; 
    public bool Checked 
    { 
     get { return _checked; } 
     set 
     { 
      if (_checked == value) return; 
      _checked = value; 
      RaisePropertyChanged("Checked"); 
     } 
    } 

    public CustomExtensions(string ext) 
    { 
     Extension = ext; 
     Checked = true; 
    } 

    public virtual event PropertyChangedEventHandler PropertyChanged; 
    protected virtual void RaisePropertyChanged(string name) 
    { 
     if (this.PropertyChanged != null) 
     { 
      this.PropertyChanged(this, new PropertyChangedEventArgs(name)); 
     } 
    } 
} 
+0

Vielen Dank ... – Gobelet