none
treeview中textblock控件绑定的文本不刷新是怎么回事? RRS feed

  • 问题

  • <TreeView.ItemTemplate > <HierarchicalDataTemplate DataType="{x:Type data:book}" ItemsSource="{Binding Path=children}"> <Grid > <Grid.ColumnDefinitions> <ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition> </Grid.ColumnDefinitions> <TextBlock Grid.Column="0" Text="{Binding position}" Margin="5,0,10,0"/> <TextBlock Grid.Column="1" Text="{Binding bookname}"></TextBlock> <TextBox Grid.Column="1" Text="{Binding bookname}" Visibility="Collapsed" KeyDown="TextBox_KeyDown"> </Grid> </HierarchicalDataTemplate> </TreeView.ItemTemplate>

    treeview绑定的数据源来自于ObservableCollection<bookChapter> allbooklists,数据显示没有错误,但是当allbooklists中的内容发生更改的时候,textblock不跟随变化。

    因为绑定bookname的textbox用于重命名,当重命名发生的时候,绑定bookname的textblock发生变化。重命名过程绑定bookname的textblock经历过visible变化。我认为textblock重新显示后就能更改,但是我的treeview太多,不可能单个刷新绑定poisition的textblock(当然也可以实现)。

    我想知道ObservableCollection中某一项的内容发生变化的时候为甚么textblock不跟随变化。

    我想有没有简便的方法 在ObservableCollection中某一项的内容发生变化的时候刷新textblock。

    2016年11月27日 13:56

答案


  • Hi  fanyule,

    >>数据显示没有错误,但是当allbooklists中的内容发生更改的时候,textblock不跟随变化。

    WPF 提供 ObservableCollection<T> 类,它是实现 INotifyCollectionChanged 接口的数据集合的内置实现。

    当你改变集合的时候,会引起后台通知机制。

    但是如果改变集合中一个Model 属性时, Model需要实现INotifyPropertyChanged接口。这样不管是集合还是对象都发生了改变。至此。我们的整个后台通知就能完美监视任何对象变动。

    你可以参考下面一篇文章。

    WPF 中双向绑定通知机制之ObservableCollection使用:
    http://www.cnblogs.com/santian/p/4366832.html

    注意:此回复包含对第三方万维网站点的引用。 Microsoft提供此信息为您提供方便。 Microsoft不控制这些网站,并且没有测试在这些网站上发现的任何软件或信息; 因此,Microsoft不能对任何软件或信息的质量,安全性或适用性做任何声明。 使用互联网上发现的任何软件都存在固有的危险,Microsoft警告您,在从互联网检索任何软件之前,请确保您完全理解风险。

    Best Regards,

    Yohann Lu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 fanyule 2016年11月28日 11:56
    2016年11月28日 9:27
    版主

全部回复


  • Hi  fanyule,

    >>数据显示没有错误,但是当allbooklists中的内容发生更改的时候,textblock不跟随变化。

    WPF 提供 ObservableCollection<T> 类,它是实现 INotifyCollectionChanged 接口的数据集合的内置实现。

    当你改变集合的时候,会引起后台通知机制。

    但是如果改变集合中一个Model 属性时, Model需要实现INotifyPropertyChanged接口。这样不管是集合还是对象都发生了改变。至此。我们的整个后台通知就能完美监视任何对象变动。

    你可以参考下面一篇文章。

    WPF 中双向绑定通知机制之ObservableCollection使用:
    http://www.cnblogs.com/santian/p/4366832.html

    注意:此回复包含对第三方万维网站点的引用。 Microsoft提供此信息为您提供方便。 Microsoft不控制这些网站,并且没有测试在这些网站上发现的任何软件或信息; 因此,Microsoft不能对任何软件或信息的质量,安全性或适用性做任何声明。 使用互联网上发现的任何软件都存在固有的危险,Microsoft警告您,在从互联网检索任何软件之前,请确保您完全理解风险。

    Best Regards,

    Yohann Lu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 fanyule 2016年11月28日 11:56
    2016年11月28日 9:27
    版主
  • 非常感谢,我明白什么意思了,多谢。
    2016年11月28日 11:56
  • 已经成功了,不过你给的链接不能直接用,MSDN上的例子可以:

    https://msdn.microsoft.com/zh-cn/library/ms229614%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

    2016年11月28日 12:49