如何调试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())); 
+0

分享示例代码 –

+0

@VinothRajendran编辑我的帖子,带有示例代码 – axcelenator

+0

'ForeCastsByDates'通知了属性(而不是项目)上的更改吗?否则,在ForeCastsByDates上做'set'操作发出通知,或者在ctor中设置集合一次,并使用'.Clear'和'.Add'作为将来的适配。 –

如果我没有错,似乎你实际上试图绑定到类字段而不是属性

数据绑定需要属性才能正常工作。为了达到这个目的,你必须创建一个private支持字段和一个public属性,然后可以通过数据绑定来访问该属性。

private ObservableCollection<ForeCast> _foreCastsByDates; 
public ObservableCollection<ForeCast> ForeCastsByDates 
{ 
    get 
    { 
     return _foreCastsByDates; 
    } 
    set 
    { 
     _foreCastsByDates = value; 
     //notify about changes 
     OnPropertyChanged(); 
    } 
} 

你可能已经注意到了属性使用的二传手一个OnPropertyChanged()方法。为了实际通知有关的财产变化的用户界面,你需要实现你的PageINotifyPropertyChanged接口:

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,该字段将会改变,但用户界面不会知道它,并且变化不会被反映出来。

+0

不,x:绑定可以绑定到字段。当你以另一种方式安排RaisePropertyChanged时将会更新。显然,这不是一种好的风格。 –

+0

酷!不知道:-O –