【发布时间】:2018-04-29 23:32:16
【问题描述】:
我有一个ComboBox 绑定到静态List。
我想更改列表中的项目,但组合框不会更新以反映更改。
XAML
<ComboBox x:Name="cbo"
ItemsSource="{Binding ComboBox_Items, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding cbo_SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
HorizontalAlignment="Left"
Margin="0,0,0,0"
VerticalAlignment="Top"
Width="100" />
C 夏普
ViewModel 类
获取/设置组合框项
public static List<string> _cbo_Items = new List<string>()
{
"Item 1",
"Item 2",
"Item 3"
};
public static List<string> ComboBox_Items
{
get { return _cbo_Items; }
set { _cbo_Items = value;}
}
public static string cbo_SelectedItem { get; set; }
另一个类
用新项目更新列表
ViewModel._cbo_Items = new List<string>()
{
"Item 4",
"Item 5",
"Item 6"
};
解决方案
我试过了,它在viewModel.OnPropertyChanged("ComboBox_Items") 上崩溃并出现空异常
public static ViewModel viewModel;
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public static List<string> ComboBox_Items
{
get { return _cbo_Items; }
set { _cbo_Items = value;
viewModel.OnPropertyChanged("ComboBox_Items");
}
}
【问题讨论】:
-
当你“新建”列表时绑定被破坏,你可以使用 observablecollection 并清除和添加项目而不是创建新实例
-
@dnr3 我用
ObservableCollectionpastebin.com/raw/YVSN7Rvz 试过这个,我在Add()上得到Object reference not set to an instance of an object.。 -
你能调试看看哪个是空的吗?
-
@dnr3 当我
Clear()ObservableCollection 它使 ObservableCollection_cbo_Items为空时,我无法添加它。但是,如果我使用 List 它可以工作。虽然它使我的 ComboBox 项目有一个垂直滚动条。 -
嗯,对不起,我不确定你是怎么回事,清除 observablcollection 不应该让它为空。