C# Infragistics XamDataGrid MVVM使用-WPF 3.5

C# Infragistics XamDataGrid MVVM使用-WPF 3.5,c#,wpf,infragistics,C#,Wpf,Infragistics,编辑:我已经看过基础设施论坛了。下面的代码基于他们的示例。数据绑定似乎不起作用 我的视图中有一个Infrastics XamDataGrid <DockPanel> <grid:XamDataGrid x:Name="gridData" DataContext="{Binding Path=DataEditorDataTable}" DataSource="{Binding Path=DataEditorDataTable.DefaultView}"

编辑:我已经看过基础设施论坛了。下面的代码基于他们的示例。数据绑定似乎不起作用

我的视图中有一个Infrastics XamDataGrid

<DockPanel>
    <grid:XamDataGrid x:Name="gridData" DataContext="{Binding Path=DataEditorDataTable}" DataSource="{Binding Path=DataEditorDataTable.DefaultView}"
                      IsSynchronizedWithCurrentItem="True" Visibility="{Binding DataGridVisible}">
        <grid:XamDataGrid.FieldLayoutSettings>
            <grid:FieldLayoutSettings AutoGenerateFields="True" AllowAddNew="False" AllowDelete="False" />
        </grid:XamDataGrid.FieldLayoutSettings>
    </grid:XamDataGrid>
</DockPanel>
在dataeditor视图模型中,我订阅了一个事件,该事件让我知道数据何时发生了更改,我构建了一个datatable并调用了一个方法SetData。(我无法提前知道网格中将显示多少列数据,这些列会随着用户交互而不断变化,因此我希望使用数据表进行绑定。)

我在这样的方法中分配属性

    /// <summary>
    /// Returns the data that the data editor displays.
    /// </summary>
    public DataTable DataEditorDataTable
    {
        get
        {
            return dtDataEditor;
        }
        set
        {
            dtDataEditor = value;
            OnPropertyChanged("DataEditorDataTable");
        }
    }

    /// <summary>
    /// Method to set data on load
    /// </summary>
    private void SetData(DataTable dtDataEditor)
    {
        if (!isDataEditorCellEdited)
            if (dtDataEditor != null && dtDataEditor.Rows.Count > 0)
            {
                try
                {
                    //Assign the data to the grid
                    DataEditorDataTable = dtDataEditor;
                    DataGridVisible = Visibility.Visible;
                }
                catch
                {
                    //If any exception occurs, hide the grid
                    DataGridVisible = Visibility.Collapsed;
                }
            }
            else                
                //If no data, hide the grid
                DataGridVisible = Visibility.Collapsed;                    

    }
//
///返回数据编辑器显示的数据。
/// 
公共数据表DataEditorDataTable
{
得到
{
返回dtDataEditor;
}
设置
{
dtDataEditor=值;
OnPropertyChanged(“DataEditorDataTable”);
}
}
/// 
///方法设置加载时的数据
/// 
私有void SetData(数据表dtDataEditor)
{
如果(!IsDataEditorCelledEdition)
if(dtDataEditor!=null&&dtDataEditor.Rows.Count>0)
{
尝试
{
//将数据分配到网格
DataEditorDataTable=dtDataEditor;
DataGridVisible=可见性;
}
抓住
{
//如果发生任何异常,请隐藏网格
DataGridVisible=可见性。已折叠;
}
}
其他的
//如果没有数据,则隐藏网格
DataGridVisible=可见性。已折叠;
}

问题是绑定根本没有发生。关于绑定,我有什么特别遗漏的吗?

要调试绑定错误,您应该查看visual studio中的输出窗口,查看是否有任何错误

阅读您的代码,我假设绑定不正确,应该是:

DataContext=“{Binding Path=DataEditorDataTable}”数据源=“{Binding Path=DefaultView}”


我所做的更改是从数据源路径中删除表中的属性,因为该表已经是DataContext,并且您希望绑定到表外的DefaultView。

如何实现DataEditorDataTable和DataGridVisible?是否实现了INotifyPropertyChanged接口?窗口/控件的DataContext是什么?//////返回数据编辑器显示的数据。///公共DataTable DataEditorDataTable{get{return dtDataEditor;}set{dtDataEditor=value;OnPropertyChanged(“DataEditorDataTable”);}}控件的数据上下文在DataEditor构造函数中设置。它已经在我提供的代码中了。
    /// <summary>
    /// Returns the data that the data editor displays.
    /// </summary>
    public DataTable DataEditorDataTable
    {
        get
        {
            return dtDataEditor;
        }
        set
        {
            dtDataEditor = value;
            OnPropertyChanged("DataEditorDataTable");
        }
    }

    /// <summary>
    /// Method to set data on load
    /// </summary>
    private void SetData(DataTable dtDataEditor)
    {
        if (!isDataEditorCellEdited)
            if (dtDataEditor != null && dtDataEditor.Rows.Count > 0)
            {
                try
                {
                    //Assign the data to the grid
                    DataEditorDataTable = dtDataEditor;
                    DataGridVisible = Visibility.Visible;
                }
                catch
                {
                    //If any exception occurs, hide the grid
                    DataGridVisible = Visibility.Collapsed;
                }
            }
            else                
                //If no data, hide the grid
                DataGridVisible = Visibility.Collapsed;                    

    }