【问题标题】:Dynamic binding on menuitemmenuitem 上的动态绑定
【发布时间】: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(); 并将它绑定到 xaml Text="{Binding Testmodel.History}"。不知何故,只有工具提示有效

标签: c# wpf data-binding


【解决方案1】:
<MenuItem.Header>
    <TextBlock
        Text="{Binding ChangeSetCache.History, 
        UpdateSourceTrigger=PropertyChanged}" />
</MenuItem.Header>

这应该可以解决您的问题

【讨论】:

  • 感谢您的帮助。我已经试过了,但令人惊讶的是它不起作用......
猜你喜欢
  • 1970-01-01
  • 2013-01-07
  • 2017-05-11
  • 1970-01-01
  • 1970-01-01
  • 2021-02-27
  • 2010-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多