Ich stehe vor einem Problem, bei dem eine ComboBox in einem UserControl ihren ausgewählten Wert nicht aktualisiert, wenn im Dropdown-Menü auf ein Element geklickt wird. Das ComboBox_SelectionChanged-Ereignis wird ausgelöst, aber die Value-Eigenschaft spiegelt nicht das ausgewählte Element wider. Interessanterweise wird die Value-Eigenschaft aktualisiert und das PropertyChanged-Ereignis ausgelöst, aber nur, wenn die ComboBox den Fokus hat und das Mausrad gescrollt wird.
< hr />
Codebeispiel
EnumPort.xaml.cs:
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows.Controls;
namespace NodeVideoEffects.Control
{
public partial class EnumPort : UserControl, IControl
{
int value = 0;
public EnumPort(List items)
{
InitializeComponent();
box.ItemsSource = items;
Value = value;
}
public object? Value
{
get => value;
set
{
this.value = (int?)value ?? 0;
OnPropertyChanged(nameof(Value));
}
}
public event PropertyChangedEventHandler PropertyChanged = delegate { };
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Value = box.SelectedIndex;
}
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
EnumPort.xaml:
Problem:
- Bei der Auswahl eines Elements aus der Dropdown-Liste wird der Wert< /code>-Eigenschaft wird nicht aktualisiert.
- Das SelectionChanged-Ereignis wird wie erwartet ausgelöst, aber Value spiegelt nicht den ausgewählten Index wider.
- Die Value-Eigenschaft wird aktualisiert und das PropertyChanged-Ereignis Wird ausgelöst, aber nur, wenn die ComboBox fokussiert ist und das Mausrad verwendet wird.
Der Code für Diese ComboBox ist auf GitHub verfügbar: EnumPort.xaml.cs auf GitHub
Hilfeanfrage:
Kann jemand helfen, warum die ComboBox-Auswahl nicht korrekt aktualisiert wird, und Wie kann dieses Problem gelöst werden? Stimmt etwas mit der Art und Weise, wie der Wert festgelegt wird, oder mit dem PropertyChanged-Ereignis nicht?
Ich habe den SelectionChanged-Ereignishandler so eingerichtet, dass er reagiert auf Änderungen und erwartet, dass das angezeigte ausgewählte Element in der Dropdown-Liste aktualisiert wird und das Ereignis entsprechend ausgelöst wird. Allerdings ändert sich weder das angezeigte Element noch spiegelt die Value-Eigenschaft den korrekten Index wider, wenn ein Element aus der Dropdown-Liste ausgewählt wird. Könnte das an der Art und Weise liegen, wie die Eigenschaft Value implementiert ist, oder an einem Bindungsproblem, das ich möglicherweise übersehe?
Ich stehe vor einem Problem, bei dem eine ComboBox in einem UserControl ihren ausgewählten Wert nicht aktualisiert, wenn im Dropdown-Menü auf ein Element geklickt wird. Das ComboBox_SelectionChanged-Ereignis wird ausgelöst, aber die Value-Eigenschaft spiegelt nicht das ausgewählte Element wider. Interessanterweise wird die Value-Eigenschaft aktualisiert und das PropertyChanged-Ereignis ausgelöst, aber nur, wenn die ComboBox den Fokus hat und das Mausrad gescrollt wird.
< hr />
Codebeispiel
EnumPort.xaml.cs:
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows.Controls;
namespace NodeVideoEffects.Control
{
public partial class EnumPort : UserControl, IControl
{
int value = 0;
public EnumPort(List items)
{
InitializeComponent();
box.ItemsSource = items;
Value = value;
}
public object? Value
{
get => value;
set
{
this.value = (int?)value ?? 0;
OnPropertyChanged(nameof(Value));
}
}
public event PropertyChangedEventHandler PropertyChanged = delegate { };
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Value = box.SelectedIndex;
}
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
EnumPort.xaml:
Problem:
[list]
[*]Bei der Auswahl eines Elements aus der Dropdown-Liste wird der Wert< /code>-Eigenschaft wird nicht aktualisiert.
[*]Das SelectionChanged-Ereignis wird wie erwartet ausgelöst, aber Value spiegelt nicht den ausgewählten Index wider.
[*]Die Value-Eigenschaft wird aktualisiert und das PropertyChanged-Ereignis Wird ausgelöst, aber nur, wenn die ComboBox fokussiert ist und das Mausrad verwendet wird.
[/list]
Der Code für Diese ComboBox ist auf GitHub verfügbar: EnumPort.xaml.cs auf GitHub
Hilfeanfrage:
Kann jemand helfen, warum die ComboBox-Auswahl nicht korrekt aktualisiert wird, und Wie kann dieses Problem gelöst werden? Stimmt etwas mit der Art und Weise, wie der Wert festgelegt wird, oder mit dem PropertyChanged-Ereignis nicht?
Ich habe den SelectionChanged-Ereignishandler so eingerichtet, dass er reagiert auf Änderungen und erwartet, dass das angezeigte ausgewählte Element in der Dropdown-Liste aktualisiert wird und das Ereignis entsprechend ausgelöst wird. Allerdings ändert sich weder das angezeigte Element noch spiegelt die Value-Eigenschaft den korrekten Index wider, wenn ein Element aus der Dropdown-Liste ausgewählt wird. Könnte das an der Art und Weise liegen, wie die Eigenschaft Value implementiert ist, oder an einem Bindungsproblem, das ich möglicherweise übersehe?