ToolTip作为计时器

时间:2016-10-24 13:22:59

标签: c# wpf

我的工具提示应该显示我的程序运行了多长时间。所以我尝试在我的工具提示中添加+1,但这不起作用。 那是我的xaml代码:

<StatusBarItem >
    <Image ToolTip="{Binding Path=ToolTipStatus}"/>
</StatusBarItem>

那就是我的C#代码:

private string _toolTipStatus = "0";
    private string ToolTipStatus
    {
        get { return _toolTipStatus; }
    }

private void Example()
    {            
        _toolTipStatus = _toolTipStatus + 1;          
    }

2 个答案:

答案 0 :(得分:3)

首先,在此代码中没有任何地方可以让UI猜测您的私有字段何时或是否已更改。其次,您的属性也是私有的,因此UI也无法看到它。最后,在计时器触发几次后,重复向字符串附加“1”将获得一个看起来像 <li ng-repeat="mainEvent in mainEvents" class="element home" ng-class="mainEvent.category" > 的字符串。如果这就是你想要的,那很好,但我认为可能不是。

"11111111111111111111111111111"

你不会说你是否有一个viewmodel。你不会说你的代码在哪个类或者如何(或者如果)调用它。您的所有房产都是私人的。你不会说XAML是什么样的,甚至没有。我在这里感受到一种强迫秘密的主题。您需要了解何时开放和分享。

你需要一个viewmodel,你需要它来实现public class ViewModelBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } public class MyViewModel : ViewModelBase { private int _toolTipStatus = 0; private int ToolTipStatus { get { return _toolTipStatus; } protected set { if (_toolTipStatus != value) { _toolTipStatus = value; OnPropertyChanged(nameof(ToolTipStatus)); } } } } private void Example() { ToolTipStatus += 1; }

答案 1 :(得分:0)

你应该刷新你的xaml。我认为最好的方法是从INotifyPropertyChanged继承表单。 然后像这样声明事件和raise方法

public event PropertyChangedEventHandler PropertyChanged;
    public void RaisePropChanged(string name)
    {
        var eh = this.PropertyChanged;
        if (eh != null)
        {
            eh(this, new PropertyChangedEventArgs(name));
        }
    }

然后您的属性ToolTipStatus应为:

private string toolTipStatus;
public string ToolTipStatus
{
    get { return toolTipStatus; }
    set
    {
        toolTipStatus = value;
        RaisePropChanged("ToolTipStatus");
    }
}