0
我有一個組合框。它將類別實例保存爲selectedItem,但是當用戶在下拉選項中未找到任何合適的類別時,他可以選擇創建新的和一個文本框出現在組合框下方,用戶可以輸入新類別的名稱現在用戶更改下拉列表,然後用戶是無法更改類別下拉列表的選擇。爲什麼表現平平?無法選擇下拉值
這裏是我的代碼: 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
}
}
只有當用戶在類別中選擇了「新建」並且已更改文本框文本時,纔會出現此問題。如果用戶將文本重新放回再次在文本框中創建新的,則用戶可以再次更改組合框的選擇。