我的DataGrid
绑定到我的通用Windows平台应用中的ObservableCollection
。
加载页面时,数据网格不会显示。我在同一页面中有另一个数据网格几乎相同但绑定到另一个集合几乎与第一个集合相同(具有绑定问题)。
有没有办法调试XAML
文件?
示例代码:
<GridView Name="HourGridView" Grid.Row="4"
ItemsSource="{x:Bind ForeCastsByDates}"
Foreground="Chartreuse" >
<GridView.ItemTemplate>
<DataTemplate x:DataType="data:ForeCast">
.......
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
没有绑定的集合:
private ObservableCollection<ForeCast> ForeCastsByDates;
捆绑好的收藏品:
private ObservableCollection<ForeCast> ForeCasts;
ForeCastsByDates是ForeCasts的一部分:
ForeCastsByDates = new ObservableCollection<ForeCast>( ForeCasts.GroupBy(x => x.Date).Select(x => x.First()));
答案 0 :(得分:0)
如果我没有错,似乎您实际上是在尝试绑定到字段类而不是属性。
数据绑定要求属性正常工作。为此,您必须创建private
支持字段和public
属性,然后可以使用数据绑定来访问该属性。
private ObservableCollection<ForeCast> _foreCastsByDates;
public ObservableCollection<ForeCast> ForeCastsByDates
{
get
{
return _foreCastsByDates;
}
set
{
_foreCastsByDates = value;
//notify about changes
OnPropertyChanged();
}
}
您可能已经注意到该属性在setter中使用了OnPropertyChanged()
方法。要实际通知用户界面有关属性的更改,您需要在INotifyPropertyChanged
上实现Page
界面:
public partial MainPage : Page, INotifyPropertyChanged
{
// your code...
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
OnPropertyChanged
方法触发PropertyChanged
事件,该事件通知侦听器属性已更改。在这种情况下,我们需要通知ForeCastsByDates
属性的更改。使用CallerMemberNameAttribute
方法参数旁边的OnPropertyChanged
,参数会自动设置为调用者的名称(在本例中为ForeCastsByDates
属性。
最后,{x:Bind}
语法默认为OneTime
模式,这意味着它只更新一次而不监听属性更改。要确保反映属性的所有后续更新,请使用
{x:Bind ForecastsByDates, Mode=OneWay}
值得一提的是,您必须对ForecastsByDates
属性本身进行更改以通知UI(必须执行属性setter才能调用OnPropertyChanged
方法)。如果只执行_foreCastsByDates = something
,该字段将会更改,但用户界面将不会知道该字段,并且不会反映更改。