C# Infragistics XamDataGrid MVVM使用-WPF 3.5
编辑:我已经看过基础设施论坛了。下面的代码基于他们的示例。数据绑定似乎不起作用 我的视图中有一个Infrastics XamDataGridC# 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}"
<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;
}