WPF DataGrid添加新行时如何为DataGridComboBoxColumn设置默认值
可行实现方案
你之前操作DataTable的逻辑完全不需要,你的数据源是绑定的ObservableCollection<MyClass>,新增行的默认值直接在实例化MyClass的时候给对应属性赋值即可,两种实现方式可选:
方式1:动态取下拉列表索引1的项作为默认值
首先把XAML中StaticResource对应的下拉列表集合,在ViewModel里暴露可访问的实例,修改AddItem方法即可:
public void AddItem() { var newItem = new MyClass(); // 确保下拉列表存在索引为1的项 if(下拉列表数据源实例.Count >= 2) { newItem.PropertyName1 = 下拉列表数据源实例[1].PropertyName1; } MyObservableCollection.Add(newItem); }
这里的「下拉列表数据源实例」就是你XAML里{Binding Source={StaticResource MyObservableCollection}}对应的集合对象,只要在ViewModel中能拿到它的引用就可以。
方式2:固定默认值直接在实体类构造中设置
如果默认值固定不需要动态取下拉列表的内容,直接在MyClass的无参构造函数里赋值即可:
public class MyClass { public MyClass(){ // 直接填入要设置的默认值 PropertyName1 = "默认值文本"; } public string PropertyName1 { get; set; } // 其余属性定义 }
之前方案失效的原因说明
TargetNullValue/FallbackValue仅在绑定源为null、绑定路径找不到时生效,不会同步修改你数据源中MyClass实例的PropertyName1属性,所以后续业务逻辑读取时还是空值,也不会触发ComboBox的选中匹配。- 你新增的
DataTable和实际绑定的ObservableCollection<MyClass>是完全独立的两个数据源,修改它的默认值不会对DataGrid的绑定产生任何影响,这段逻辑可以直接删除。
内容的提问来源于stack exchange,提问作者Ole M
相关产品推荐
相关产品推荐

