【问题标题】:WPF- Not able to Bind XamDatagrid with observable collectionWPF-无法将 XamDatagrid 与可观察集合绑定
【发布时间】:2017-11-10 04:34:38
【问题描述】:

我正在开发一个使用基础设施和 wpf 来显示数据的应用程序。 我的代码是这样的

<Grid>
    <ItemsControl x:Name="MyItemContol"  ItemsSource="{Binding ViewSetList}" 
VerticalAlignment="Stretch" HorizontalAlignment="Stretch">

        <ItemsControl.ItemTemplate>
            <DataTemplate>

                <igDP:XamDataGrid  DataSource="{Binding ViewSetList}" >
                    <igDP:XamDataGrid.FieldLayouts>
                        <igDP:FieldLayout>
                            <igDP:FieldLayout.Fields>

                                <igDP:Field Name="PARAMETER">
                                    <igDP:Field.Settings>
                                        <igDP:FieldSettings AllowEdit="False" />
                                    </igDP:Field.Settings>

                                </igDP:Field>

                                <igDP:Field Name="VALUE">
                                    <igDP:Field.Settings>
                                        <igDP:FieldSettings AllowEdit="False"   />
                                    </igDP:Field.Settings>
                                </igDP:Field>
                                <igDP:Field Name="UNIT">
                                    <igDP:Field.Settings>
                                        <igDP:FieldSettings AllowEdit="False" />
                                    </igDP:Field.Settings>
                                </igDP:Field>
                                <igDP:Field Name="INSTANCE">
                                    <igDP:Field.Settings>
                                        <igDP:FieldSettings AllowEdit="False" />
                                    </igDP:Field.Settings>
                                </igDP:Field>

                            </igDP:FieldLayout.Fields>
                        </igDP:FieldLayout>
                    </igDP:XamDataGrid.FieldLayouts>

                </igDP:XamDataGrid>


            </DataTemplate>
        </ItemsControl.ItemTemplate>

    </ItemsControl>
</Grid>

这个xaml文件包含四个字段Parameter、value、unit和instances。

 public partial class MainWindow : Window 
    {
        private ObservableCollection<Parameters> viewSetList = new 
        ObservableCollection<Parameters>();

        public MainWindow()
        {
        InitializeComponent();

        //Add data to the collection
        viewSetList.Add(new Parameters() { PARAMETER="abc",  INSTANCE="def" , UNIT="hhshhd", VALUE="hahha" });


    }


public class Parameters:  INotifyPropertyChanged
{
    private string parameterName = string.Empty;

    public string PARAMETER
    {
        get { return parameterName; }
        set { parameterName = value; }
    }
    private string parameterValue = string.Empty;

    public string VALUE
    {
        get { return parameterValue; }
        set { parameterValue = value; }
    }
    private string parameterUnit = string.Empty;

    public string UNIT
    {
        get { return parameterUnit; }
        set { parameterUnit = value; }
    }
    private string instance = string.Empty;

    public string INSTANCE
    {
        get { return instance; }
        set { instance = value; }
    }       

    public event PropertyChangedEventHandler PropertyChanged;
    private void onPropertyChanged(object sender, string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            PropertyChanged(sender, new PropertyChangedEventArgs(propertyName));
        }
    }
}

当我执行时,它只显示空白屏幕。但是我在 xaml 文件中包含了 ItemsSource="{Binding ViewSetList}" 。谁能告诉我为什么绑定没有发生?

我还需要绑定 XamDataGrid 吗?

我们将不胜感激。

谢谢

【问题讨论】:

  • 代码有太多错误,你也懒得提供一个好的minimal reproducible example,所以试图提供一个实际的答案是不切实际的。但是:您只能绑定到属性。并且这些属性需要是公开的。而且C#区分大小写,所以ViewSetListviewSetList不一样。而{Binding ViewSetList} 在您控件中的 item 上下文中将无效。您应该首先关注这些问题。如果您仍然需要帮助,请发布一个问题,其中包含一个好的 minimal reproducible example,并且更具体地说明您已经完成了哪些调试工作以及您需要哪些帮助
  • 我将其公开并将绑定更改为 viewSetList。但我仍然得到黑屏
  • 这些不是代码中唯一的问题。这些甚至不是我在之前的评论中提到的唯一问题。
  • 我听不懂你在说什么?
  • 对不起,你看不懂我的cmets。但是,请注意,“我无法理解您在说什么” 声明并没有提供任何有用的反馈来说明您具体 不理解的内容或我如何理解可能会改写我所说的,以便您理解。请更加努力地使您的沟通更加准确,并提供所有必要的细节以推动沟通向前发展。

标签: c# wpf xaml infragistics xamdatagrid


【解决方案1】:

为什么将XamDataGrid 放在ItemsControl 中?您不需要ItemsControl

删除它并使ViewSetList成为一个公共属性并将窗口的DataContext设置为自身:

public partial class MainWindow : Window
{
    private ObservableCollection<Parameters> _viewSetList = new ObservableCollection<Parameters>();
    public ObservableCollection<Parameters> ViewSetList { get { return _viewSetList; } }

    public MainWindow()
    {
        InitializeComponent();

        //Add data to the collection
        _viewSetList.Add(new Parameters() { PARAMETER = "abc", INSTANCE = "def", UNIT = "hhshhd", VALUE = "hahha" });

        DataContext = this;
    }
}

然后您可以将XamDataGrid 绑定到属性:

<Grid>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <igDP:XamDataGrid DataSource="{Binding ViewSetList}" >
                <igDP:XamDataGrid.FieldLayouts>
                    <igDP:FieldLayout>
                        <igDP:FieldLayout.Fields>
                            <igDP:Field Name="PARAMETER">
                                <igDP:Field.Settings>
                                    <igDP:FieldSettings AllowEdit="False" />
                                </igDP:Field.Settings>
                            </igDP:Field>
                            <igDP:Field Name="VALUE">
                                <igDP:Field.Settings>
                                    <igDP:FieldSettings AllowEdit="False"   />
                                </igDP:Field.Settings>
                            </igDP:Field>
                            <igDP:Field Name="UNIT">
                                <igDP:Field.Settings>
                                    <igDP:FieldSettings AllowEdit="False" />
                                </igDP:Field.Settings>
                            </igDP:Field>
                            <igDP:Field Name="INSTANCE">
                                <igDP:Field.Settings>
                                    <igDP:FieldSettings AllowEdit="False" />
                                </igDP:Field.Settings>
                            </igDP:Field>

                        </igDP:FieldLayout.Fields>
                    </igDP:FieldLayout>
                </igDP:XamDataGrid.FieldLayouts>
            </igDP:XamDataGrid>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</Grid>

您不能绑定到私有字段。

【讨论】:

    猜你喜欢
    • 2015-03-07
    • 1970-01-01
    • 2013-05-21
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    相关资源
    最近更新 更多