WPF-无法将 XamDatagrid 与可观察集合绑定
WPF- Not able to Bind XamDatagrid with observable collection
我正在开发一个应用程序,我在其中使用 infragistics 和 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 文件包含四个字段参数、值、单位和实例。
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 吗?
非常感谢您的帮助。
谢谢
为什么要将 XamDataGrid
放在 ItemsControl
中?您不需要 ItemsControl
。
删除它并使ViewSetList
成为public属性并设置window的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>
您不能绑定到私有字段。
我正在开发一个应用程序,我在其中使用 infragistics 和 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 文件包含四个字段参数、值、单位和实例。
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 吗?
非常感谢您的帮助。
谢谢
为什么要将 XamDataGrid
放在 ItemsControl
中?您不需要 ItemsControl
。
删除它并使ViewSetList
成为public属性并设置window的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>
您不能绑定到私有字段。