如何解决Syncfusion SfDataGrid 数据绑定问题和 DataGrid 列中的唯一值
我遇到了与 SfDataGrid 的数据绑定问题。我正在为我的简单项目使用 MVVM 架构。下面是我的简化项目(省略了一些代码):
模型:
Combo.cs:
public class Combo : INotifyPropertyChanged
{
private string name;
public ObservableCollection<LoadCase> LoadCases { get; set; }
#region getters and setters
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public Combo(....)
{
....
}
.....
}
LoadCase.cs
public class LoadCase : INotifyPropertyChanged
{
private string name;
private double sf;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public double SF
{
get
{
return sf;
}
set
{
sf = value;
}
}
public LoadCase(....)
{
....
}
....
}
MainWindowviewmodel.cs
public class MainWindowviewmodel : INotifyPropertyChanged
{
public Combo ObjCombo
{
get; set;
}
private ObservableCollection<object> combosandloadcasesList;
public ObservableCollection<object> CombosAndLoadCasesList
{
get { return combosandloadcasesList; }
set { combosandloadcasesList = value; }
}
public MainWindowviewmodel()
{
....
}
...
}
观看次数:
子视图
public partial class ChildView: Window
{
private MainWindowviewmodel viewmodel;
public ChildView(MainWindowviewmodel _viewmodel)
{
InitializeComponent();
viewmodel = _viewmodel;
this.DataContext = viewmodel;
}
}
我正在尝试添加一个将绑定到 ObjCombo.LoadCases 的 SfDataGrid。那部分工作。然后我添加了两列;一个组合框和一个文本框。我的问题是组合框。组合框应绑定到 ObjCombo.LoadCases Name 属性,下拉列表应包含 CombosAndLoadCasesList 中的对象。文本列工作正常,它绑定到 ObjCombo.LoadCases SF 属性。但是我的组合框部分工作。它显示了它与 CombosAndLoadCasesList 的绑定,但下拉列表显示了对象的类型而不是它们的名称。我不确定为什么 displayMemeberPath 不起作用。
子视图中的 xaml:
<Syncfusion:SfDataGrid x:Name="ComboInfoDG" Grid.ColumnSpan="3" AutoGenerateColumns="False" Margin="10,10,10" Grid.Row="3" Grid.Column="0"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding ObjCombo.LoadCases}" AllowEditing="True" EditTrigger="OnTap">
<Syncfusion:SfDataGrid.Columns>
<Syncfusion:GridComboBoxColumn x:Name="ComboBoxcolumn" HeaderText="Load Name"
ItemsSource="{Binding DataContext.CombosAndLoadCasesList,ElementName=ComboInfoDG}"
displayMemberPath="{Binding Name}"
MappingName="Name"/>
<Syncfusion:GridTextColumn HeaderText="Load factor"
MappingName="SF"/>
</Syncfusion:SfDataGrid.Columns>
</Syncfusion:SfDataGrid>
这是我的调试器向我展示的内容:
- 错误 1 null 无法使用默认转换将 '' 从类型 '' 转换为类型 'System.Uri' 的“en-US”区域性;考虑使用 Binding 的 Converter 属性。 NotSupportedException:'System.NotSupportedException: UriTypeConverter 无法从 (null) 转换。
- 在 MainWindowviewmodel 类型的对象上找不到错误 1 MainWindowviewmodel 名称 GridComboBoxColumn.displayMemberPath 字符串名称属性。
- 在 GridComboBoxColumn 类型的对象上找不到错误 2 GridComboBoxColumn 名称 GridComboBoxColumn.displayMemberPath 字符串名称属性。
- 错误 2 SfDataGrid,Name='ComboInfoDG' DataContext.CombosAndLoadCasesList GridComboBoxColumn.ItemsSource IEnumerable 找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement。
- 错误 1 MainWindowviewmodel 名称 GridComboBoxColumn.displayMemberPath 字符串找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement。
- 错误 1 GridComboBoxColumn 名称 GridComboBoxColumn.displayMemberPath String 找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement。
当我在 WPF 中使用传统的 DataGrid 时(代码略有不同),我有这个工作。我决定使用第三方框架,因为我认为它可能具有我将来可能需要的功能,而无需弄清楚如何实现它们。如果您已经做到了这一点,您能否为我提供任何提示以帮助我实施以下操作(请提供任何指导):
- 一种基于用户输入(在该组合框中)在每个组合框中实现过滤器的方法,该过滤器将过滤下拉列表。
- 只允许在组合框列中使用唯一值。
- 仅允许该列中的值位于 CombosAndLoadCasesList 中。
- 一种在我的窗口中设置“确定”和“取消”按钮的方法,这样当用户按下取消键时,在 SfDataGrid 中所做的任何更改都不会反映在绑定变量中。如果用户按 OK,则保存更改。有名为 OldItemsSource 和 NewItemsSource 的事件,但我不确定如何利用它们。
提前感谢您的帮助,如果有其他框架/第三方 DataGrid 执行以下操作并且是免费的(社区许可),请告诉我我很乐意切换。
SfDataGrid 的文档: Documentation
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。