财产不是第二次触发

时间:2016-05-31 15:56:40

标签: wpf inotifypropertychanged

我有4个多边形

...
xmlns:cm="http://www.caliburnproject.org"
...
<Polygon cm:Message.Attach="
    [Event MouseEnter] = [Action OnMouseEnter($eventArgs)];
    [Event MouseLeave] = [Action OnMouseLeave($eventArgs)];
    [Event MouseDown]  = [Action OnMouseDown($eventArgs)]">
    <Polygon.ToolTip>
        <ToolTip Visibility="{Binding Path=TooltipVisibility}" >
...

在我的画布上。

TooltipVisibility代码:

    public string TooltipVisibility {
        get {
            if (OtherObject.IsTooltipVisibility) {
                return "Visible";
            }
            else {
                return "Hidden";
            }
        }
    }

OtherObject上的IsTooltipVisibility已从第3位更改。我尝试执行NotifyOfPropertyChange(() => myObject.TooltipVisibility );,尝试运行NotifyOfPropertyChange(() => otherObject.IsTooltipVisibility);

有趣(但不是真的)的事情是,如果我将鼠标悬停在一个多边形上它显示工具提示,然后我将IsTooltipVisibility(通过点击菜单栏中的菜单按钮)更改为false,它不显示第二个工具提示多边形,但仍然在第一个上显示它。第三个不会显示工具提示。改为true,第4个将显示,但是,第2个和第3个不会。

TooltipVisibility属性只执行了一个。如何让它一直执行?

1 个答案:

答案 0 :(得分:0)

这真是奇怪的解决方案。有用。也许它应该以这种方式工作。但我认为这太复杂了。它应该更简单,代码更少。

    public void SetTooltipVisibility(bool toShowTooltip) {
        if (toShowTooltip) {
            _tooltipVisibility = "Visible";
        }
        else {
            _tooltipVisibility = "Hidden";
        }
        NotifyOfPropertyChange(() => TooltipVisibility);
    }

    private string _tooltipVisibility = "Visible";
    public string TooltipVisibility {
        get {
            return _tooltipVisibility;
        }
    }

而不只是设置一个标志

OtherObject.IsTooltipVisibility = true;

额外性我需要

liistOfMyObjects.Apply(o=>o.SetTooltipVisibility(OtherObject.IsTooltipVisibility));

不是最好的解决方案。

我正在等待专业人士展示如何以正确的方式完成这项工作。