WPF MVVM可编辑组合框新值为空
本文关键字:新值 组合 MVVM 编辑 WPF | 更新日期: 2023-09-27 18:08:14
在这里尝试了所有类似问题的解决方案,仍然没有成功。我有一个ComboBox
,应该为选择现有项目和/或添加新项目工作。只有选定的项目部分有效。范畴只是一个具有Name
和Id
的对象。
提前感谢!
XAML
<ComboBox Name="CbCategory" ItemsSource="{Binding Categories}"
SelectedItem="{Binding SelectedCategory.Name, UpdateSourceTrigger=PropertyChanged}"
Text="{Binding NewCategory.Name}" DisplayMemberPath="Name"
IsEditable="True"/>
Code behind
private Category _selectedCategory;
public Category SelectedCategory
{
get { return _selectedCategory; }
set
{
if (Equals(_selectedCategory, value)) return;
_selectedCategory = value;
SendPropertyChanged("SelectedCategory");
}
}
private Category _newCategory;
public Category NewCategory
{
get { return _newCategory; }
set
{
if (Equals(_newCategory, value)) return;
_newCategory = value;
SendPropertyChanged("NewCategory");
}
}
您的Text
绑定不起作用,因为您绑定的是null
Category
属性。实例化它。
public Category NewCategory
{
get { return _newCategory ?? (_newCategory = new Category()); }
set
{
if (Equals(_newCategory, value)) return;
_newCategory = value;
SendPropertyChanged("NewCategory");
}
}
编辑:根据您的评论详细阐述:
您的ComboBox.Text
绑定设置为"{Binding NewCategory.Name}"
,因此无论SelectedCategory
的值是什么,Text
属性将始终反映NewCategory
的名称。
当NewCategory
为null时,Text
属性没有什么可绑定的,因此不能执行双向绑定(也就是说,Text
属性的值不能传递回NewCategory.Name
,因为这会导致NullReferenceException
(因为NewCategory
为null)。
这不会影响SelectedItem
的情况,因为它直接绑定到SelectedCategory
属性,而不是它的子属性。
创建新变量以保留组合框的文本。如果selectedItem为空值,则获取组合框的文本作为新Item,
代码:<ComboBox Name="CbCategory" ItemsSource="{Binding Categories}"
SelectedItem="{Binding SelectedCategory.Name, UpdateSourceTrigger=PropertyChanged}"
Text="{Binding Name}" DisplayMemberPath="Name"
IsEditable="True"/>
private String _name;
public Category Name
{
get { return _name; }
set
{
_name = value
SendPropertyChanged("Name");
}
}
public ICommand ItemChange
{
get
{
`return new RelayCommand(() =>`{
try{string item = this.SelectedCategory.Code;}
catch(Exception ex){string item = this.Name;}
}, () => { return true; });
}
}