Ich habe eine Combobox. Es hält die Kategorie-Instanz als selectedItem, aber wenn Benutzer keine passende Kategorie in der Dropdown-Option gefunden hat, kann er neue erstellen auswählen und ein Textfeld erscheint in der Combobox und der Benutzer kann den Namen der neuen Kategorie eingeben, der Benutzer ändert das Dropdown und dann der Benutzer nicht in der Lage, die Auswahl der Dropdown-Kategorie zu ändern. Warum verhält sich strage?Dropdown-Wert kann nicht ausgewählt werden
Hier ist mein Code: MainWindow.xaml
<StackPanel>
<TextBlock Text="{Binding Name, Mode=TwoWay}"></TextBlock>
<ComboBox x:Name="Category" ItemsSource="{Binding Categories}" DisplayMemberPath="Name"
SelectedItem="{Binding Menu.Category, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"/>
<TextBox Text="{Binding Menu.Category.Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}">
<TextBox.Style>
<Style>
<Setter Property="TextBox.Visibility" Value="Collapsed"></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=Category, Path=SelectedItem.Id}" Value="-1">
<Setter Property="TextBox.Visibility" Value="Visible"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</StackPanel>
MainViewModel.cs
public class MainViewModel : ViewModelBase
{
public MainViewModel()
{
Name = "Jenish";
Categories = new ObservableCollection<Category>();
Categories.Add(new Category(){ Id = -1, Name = "Create New"});
Categories.Add(new Category() { Id = 1, Name = "Test1" });
Categories.Add(new Category() { Id = 2, Name = "Test2" });
Menu = new Menu();
}
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
RaisePropertyChanged(() => Name);
}
}
private ObservableCollection<Category> _categories;
public ObservableCollection<Category> Categories
{
get { return _categories; }
set
{
_categories = value;
RaisePropertyChanged(() => Categories);
}
}
private Menu _menu;
public Menu Menu
{
get { return _menu; }
set
{
_menu = value;
RaisePropertyChanged(() => Menu);
}
}
}
Menu.cs
public class Menu : ViewModelBase
{
private int _id;
public int Id
{
get => _id;
set
{
_id = value;
RaisePropertyChanged(() => Id);
}
}
private Category _category;
public Category Category
{
get => _category;
set
{
_category = value;
RaisePropertyChanged(() => Category);
}
}
}
Category.cs
public class Category : ViewModelBase
{
private int _Id;
public int Id
{
get => _Id;
set
{
_Id = value;
RaisePropertyChanged(() => Id);
}
}
private string _name;
public string Name
{
get => _name;
set
{
_name = value;
RaisePropertyChanged(() => Name);
}
}
public override int GetHashCode()
{
return Id.GetHashCode() & Name.GetHashCode();//for reference type binding to the selectedItem in the combobox
}
}
Dieses Problem tritt nur auf, wenn der Benutzer in der Kategorie Neu erstellen ausgewählt und den Textfeldtext geändert hat. Wenn der Benutzer den Text wieder als Create New in das Textfeld einfügt, kann der Benutzer die Auswahl der Combobox erneut ändern.
Siehe Bild unten, wo ich die Auswahl nicht ändern kann.