如何调试UWP xaml绑定?
我有一个DataGrid
在我的通用Windows平台应用程序中绑定到ObservableCollection
。如何调试UWP xaml绑定?
加载页面时,datagrid未显示。我在同一个页面中有另一个数据网格,它几乎相同,但绑定到另一个集合几乎与第一个集合相同(它具有绑定问题)。
有什么方法可以调试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是预测的一部分:
ForeCastsByDates = new ObservableCollection<ForeCast>(ForeCasts.GroupBy(x => x.Date).Select(x => x.First()));
如果我没有错,似乎你实际上试图绑定到类字段而不是属性。
数据绑定需要属性才能正常工作。为了达到这个目的,你必须创建一个private
支持字段和一个public
属性,然后可以通过数据绑定来访问该属性。
private ObservableCollection<ForeCast> _foreCastsByDates;
public ObservableCollection<ForeCast> ForeCastsByDates
{
get
{
return _foreCastsByDates;
}
set
{
_foreCastsByDates = value;
//notify about changes
OnPropertyChanged();
}
}
你可能已经注意到了属性使用的二传手一个OnPropertyChanged()
方法。为了实际通知有关的财产变化的用户界面,你需要实现你的Page
的INotifyPropertyChanged
接口:
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
属性的更改。使用旁边的OnPropertyChanged
方法参数中使用的CallerMemberNameAttribute
,参数被自动设置为呼叫者的名字(在这种情况下ForeCastsByDates
属性。
最后,{x:Bind}
语法默认为OneTime
模式,这意味着它是仅更新一次,不听属性更改。为了保证所有后续更新的财产都反映,使用
{x:Bind ForecastsByDates, Mode=OneWay}
重要的是要提的是,你必须做出更改ForecastsByDates
属性本身来通知UI (财产etter必须执行以调用OnPropertyChanged
方法)。如果你只是_foreCastsByDates = something
,该字段将会改变,但用户界面不会知道它,并且变化不会被反映出来。
不,x:绑定可以绑定到字段。当你以另一种方式安排RaisePropertyChanged时将会更新。显然,这不是一种好的风格。 –
酷!不知道:-O –
分享示例代码 –
@VinothRajendran编辑我的帖子,带有示例代码 – axcelenator
'ForeCastsByDates'通知了属性(而不是项目)上的更改吗?否则,在ForeCastsByDates上做'set'操作发出通知,或者在ctor中设置集合一次,并使用'.Clear'和'.Add'作为将来的适配。 –