私はコンボボックスを持っています。これはカテゴリインスタンスをselectedItemとして保持しますが、ユーザーがドロップダウンオプションで適切なカテゴリを見つけられなかった場合、新規作成を選択でき、コンボボックスの下に1つのテキストボックスが表示され、ユーザーが新しいカテゴリの名前を入力できるようになりました。カテゴリのドロップダウンの選択を変更することはできません。なぜ行動するのか?ここでドロップダウン値を選択できません
は私のコードです: 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
}
}
この問題は、カテゴリで[新規作成]を選択してテキストボックスのテキストを変更した場合にのみ発生します。テキストボックスに新規作成というテキストを再度入力すると、ユーザーは再びコンボボックスの選択を変更できます。