1

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

我认为我有一个 Infragistics 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>

我在构造函数中为用户控件设置数据上下文。

public DataEditor(SomeDataType DataType, IEventAggregator eventaggregator)
    {
        InitializeComponent();

        this.DataContext = new DataEditorViewModel(DataType, eventaggregator);
    }

在数据编辑器视图模型中,我订阅了一个让我知道数据何时发生变化的事件,我构建了一个数据表并调用了一个方法 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;                    

    }

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

4

1 回答 1

2

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

阅读您拥有的代码,我认为绑定不正确,应该是:

DataContext="{绑定路径=DataEditorDataTable}" DataSource="{绑定路径=DefaultView}"

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

于 2013-01-02T22:45:52.977 回答