微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Syncfusion SfDataGrid 数据绑定问题和 DataGrid 列中的唯一值

如何解决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(....)
    {
          ....
    }
      ....
}

viewmodel(我有 2 个共享相同视图模型的视图):

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 时(代码略有不同),我有这个工作。我决定使用第三方框架,因为我认为它可能具有我将来可能需要的功能,而无需弄清楚如何实现它们。如果您已经做到了这一点,您能否为我提供任何提示以帮助我实施以下操作(请提供任何指导):

  1. 一种基于用户输入(在该组合框中)在每个组合框中实现过滤器的方法,该过滤器将过滤下拉列表。
  2. 只允许在组合框列中使用唯一值。
  3. 仅允许该列中的值位于 CombosAndLoadCasesList 中。
  4. 一种在我的窗口中设置“确定”和“取消”按钮的方法,这样当用户按下取消键时,在 SfDataGrid 中所做的任何更改都不会反映在绑定变量中。如果用户按 OK,则保存更改。有名为 OldItemsSource 和 NewItemsSource 的事件,但我不确定如何利用它们。

提前感谢您的帮助,如果有其他框架/第三方 DataGrid 执行以下操作并且是免费的(社区许可),请告诉我我很乐意切换。

SfDataGrid 的文档: Documentation

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。