首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

“DataContext数据下上文”绑定不下 , Why?

2012-08-28 
“DataContext数据上下文”绑定不上 , Why???“DataContext数据上下文”绑定不上 , Why???思路:1、将“数据集类

“DataContext数据上下文”绑定不上 , Why???
“DataContext数据上下文”绑定不上 , Why???

思路:

1、将“数据集类的实例对象”赋值给“Grid”的数据上下文,DataContext。

2、“Grid”里有一个“Lable”,一个“DataGrid”进行数据绑定。

问题:数据绑定不上。

1、后台代码:

  public partial class CustomReportTest : UserControl
  {
  public CustomReportTest()
  {
  InitializeComponent();

  EnergyList energylist = new EnergyList();
  LayoutRoot.DataContext = energylist;

  //dg_EnergyCustom.ItemsSource = energylist.energylist;
  }
  }

  public class EnergyList
{
private string _energytitle;


  public string EnergyTitle 
  {
  get {return _energytitle;}
  set { _energytitle = "指标报表"; }
  }
   
   
  public List<EnergyTarget> energylist = new List<EnergyTarget> {
  new EnergyTarget{EnergyYear="2010",EnergySum="7678.09",EnergyEveryOne="89.78",EnergyUnitArea="45.65"},
  new EnergyTarget{EnergyYear="2011",EnergySum="8978.48",EnergyEveryOne="67.75",EnergyUnitArea="43.63"}
  };
}

public class EnergyTarget
{
   

public string EnergyYear
{
  get;
  set;
}

public string EnergySum
{
  get;
  set;
}

public string EnergyUnitArea
{
  get;
  set;
}

public string EnergyEveryOne
{
  get;
  set;
}


}
2、XAML代码

   

  <Grid x:Name="LayoutRoot" Background="White">
  <Grid Margin="69,80,79,82">
  <Grid.RowDefinitions>
  <RowDefinition Height="30"/>
  <RowDefinition/>
  </Grid.RowDefinitions>

  <sdk:Label Background="#FFB7D4E0" Content="{Binding EnergyTitle}"/>
  <sdk:DataGrid Grid.Row="1" Name="dg_EnergyCustom" AutoGenerateColumns="False" ItemsSource="{Binding energylist}">
  <sdk:DataGrid.Columns>
  <sdk:DataGridTemplateColumn DisplayIndex="-1" Header="年份" IsReadOnly="True" Width="30*" >
  <sdk:DataGridTemplateColumn.CellTemplate >
  <DataTemplate>
  <TextBlock FontSize="13" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding EnergyYear}"></TextBlock>
  </DataTemplate>
  </sdk:DataGridTemplateColumn.CellTemplate>
  </sdk:DataGridTemplateColumn>
  <sdk:DataGridTemplateColumn Header="项目" Width="30*">
  <sdk:DataGridTemplateColumn.CellTemplate >
  <DataTemplate>
  <Grid ShowGridLines="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
  <Grid.RowDefinitions>


  <RowDefinition Height="20" />
  <RowDefinition Height="20"/>
  <RowDefinition Height="20"/>
  </Grid.RowDefinitions>
  <TextBlock Text="能耗量合计" Grid.Row="0" ></TextBlock>
  <TextBlock Text="单位面积能耗" Grid.Row="1"></TextBlock>
  <TextBlock Text="生均能耗" Grid.Row="2"></TextBlock>
  </Grid>

  </DataTemplate>
  </sdk:DataGridTemplateColumn.CellTemplate>
  </sdk:DataGridTemplateColumn>
  <sdk:DataGridTemplateColumn Header="全校" Width="40*">
  <sdk:DataGridTemplateColumn.CellTemplate >
  <DataTemplate>
  <Grid ShowGridLines="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
  <Grid.RowDefinitions>
  <RowDefinition Height="20" />
  <RowDefinition Height="20"/>
  <RowDefinition Height="20"/>
  </Grid.RowDefinitions>
  <TextBlock Grid.Row="0" Text="{Binding EnergySum}" ></TextBlock>
  <TextBlock Grid.Row="1" Text="{Binding EnergyUnitArea}" ></TextBlock>
  <TextBlock Grid.Row="2" Text="{Binding EnergyEveryOne}"></TextBlock>
  </Grid>

  </DataTemplate>
  </sdk:DataGridTemplateColumn.CellTemplate>
  </sdk:DataGridTemplateColumn>
  </sdk:DataGrid.Columns>

  </sdk:DataGrid>

  </Grid>
  </Grid>
 

3、运行效果,数据绑定不上,Why???



[解决办法]
WPF?设断点瞅下。WPF还没玩过来。
[解决办法]
要绑定集合
LayoutRoot.DataContext = energylist.energylist;
[解决办法]

探讨

引用:

要绑定集合
LayoutRoot.DataContext = energylist.energylist;


页面初始化的时候已经绑定了啊。

如下:LayoutRoot.DataContext = energylist;

[解决办法]
EnergyList energylist = new EnergyList();
LayoutRoot.DataContext = energylist;
dg_EnergyCustom.ItemsSource = energylist.energylist;
要用dg_EnergyCustom绑定集合,将标记里的删掉,
没有意义,因为初始化时集合是空的,
只有实例化类后集合才有值,
这时绑定才不为空
亲测可行!

[解决办法]
你的energylist 必须要写属性。反则,界面获取不到数据。第一个字段也不对
[解决办法]
我给你改了一下。后台
public partial class MainWindow : Window


{
public MainWindow()
{
InitializeComponent();
EnergyList energylist = new EnergyList();
energylist.EnergyTitle = "指标报表";
LayoutRoot.DataContext = energylist;
}
}
public class EnergyList
{
private string _energytitle;


public string EnergyTitle
{
get { return _energytitle; }
set { _energytitle = "指标报表"; }
}

public EnergyList()
{
this.energylist= new List<EnergyTarget> { 
new EnergyTarget{EnergyYear="2010",EnergySum="7678.09",EnergyEveryOne="89.78",EnergyUnitArea="45.65"},
new EnergyTarget{EnergyYear="2011",EnergySum="8978.48",EnergyEveryOne="67.75",EnergyUnitArea="43.63"}
};
}
private List<EnergyTarget> energylist = null;

public List<EnergyTarget> Energylist
{
get { return energylist; }
set { energylist = value; }
}
}

public class EnergyTarget
{


public string EnergyYear
{
get;
set;
}

public string EnergySum
{
get;
set;
}

public string EnergyUnitArea
{
get;
set;
}

public string EnergyEveryOne
{
get;
set;
}

}
前台
<Grid Name="LayoutRoot" >

<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition/>
</Grid.RowDefinitions>

<Label Background="#FFB7D4E0" Content="{Binding EnergyTitle}"/>
<DataGrid Grid.Row="1" Name="dg_EnergyCustom" AutoGenerateColumns="False" ItemsSource="{Binding Energylist}">
<DataGrid.Columns>
<DataGridTemplateColumn Header="年份" IsReadOnly="True" Width="30*" >
<DataGridTemplateColumn.CellTemplate >
<DataTemplate>
<TextBlock FontSize="13" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding EnergyYear}"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="项目" Width="30*">
<DataGridTemplateColumn.CellTemplate >
<DataTemplate>
<Grid ShowGridLines="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
<Grid.RowDefinitions>
<RowDefinition Height="20" />
<RowDefinition Height="20"/>
<RowDefinition Height="20"/>
</Grid.RowDefinitions>
<TextBlock Text="能耗量合计" Grid.Row="0" ></TextBlock>
<TextBlock Text="单位面积能耗" Grid.Row="1"></TextBlock>
<TextBlock Text="生均能耗" Grid.Row="2"></TextBlock>


</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="全校" Width="40*">
<DataGridTemplateColumn.CellTemplate >
<DataTemplate>
<Grid ShowGridLines="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="20" />
<RowDefinition Height="20"/>
<RowDefinition Height="20"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="{Binding EnergySum}" ></TextBlock>
<TextBlock Grid.Row="1" Text="{Binding EnergyUnitArea}" ></TextBlock>
<TextBlock Grid.Row="2" Text="{Binding EnergyEveryOne}"></TextBlock>
</Grid>

</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>

</DataGrid>
</Grid>
[解决办法]
问题1:
List没有继承INotifyCollectionChanged,所有集合发生变化的时候没法通知绑定的目标。
使用System.Collections.ObjectModel.ObservableCollection<T>

问题2:
随便baidu一下,C# 属性。
[解决办法]

探讨
引用:

问题1:
List没有继承INotifyCollectionChanged,所有集合发生变化的时候没法通知绑定的目标。
使用System.Collections.ObjectModel.ObservableCollection<T>

问题2:
随便baidu一下,C# 属性。


在客户端对属性进行“重新赋值”,然后绑定到客户端也要实现“Syste……

热点排行