【发布时间】:2017-05-09 04:43:49
【问题描述】:
我得到了以下菜单项
<MenuItem
Header="{Binding ChangeSetCache.History">
<MenuItem.ToolTip>
<TextBlock
Text="{Binding ChangeSetCache.History}" />
</MenuItem.ToolTip>
</MenuItem>
ChangeSetCache 类如下所示:
public class ChangeSetCache : BaseModel
{
private ObservableCollection<ChangeSetModel> cache { get; set; } = new ObservableCollection<ChangeSetModel>();
public string History
{
get { return cache.Count.ToString(); }
set { }
}
}
(INotifyPropertyChanged 在基础模型中实现。)
为什么工具提示会更新绑定而 menuitem-header 不会?如何根据需要更新 menuitem-header?
如果我像下面这样设计菜单项工具提示,工具提示也不会更新:
<MenuItem
Header="{Binding ChangeSetCache.History}"
ToolTip="{Binding ChangeSetCache.History}" />
【问题讨论】:
-
请注意,设置
UpdateSourceTrigger=PropertyChanged在这里毫无意义。它仅在 TwoWay 或 OneWayToSource 绑定中有效。也就是说,您的属性的设置器是空的。您希望如何触发 PropertyChanged 事件? -
感谢您的提示。当然,我只需要 OneWay 绑定,不需要从视图更新源。我会更新我的问题。
-
什么时候通知或致电
OnPropertyChanged("History")?如果您不调用,UI 将不会知道该属性的新值。 -
基类
BaseModel将调用每个属性的方法。在另一种方式中,我用一个测试类尝试了它,它以某种方式显示了相同的行为:pastebin.com/27GLVH11 在我的 ViewModel 中,我确实创建了这个类的一个属性public Testmodel Testmodel { get; private set; } = new Testmodel();并将它绑定到 xamlText="{Binding Testmodel.History}"。不知何故,只有工具提示有效
标签: c# wpf data-binding