2016-10-24 3 views
-3

ツールチップには、プログラムの実行時間が表示されます。だから私は+1を自分のツールチップに追加しようとしているが、それはうまくいかない。ToolTip as Timer

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

そして、私のC#のコードのthats::私のXAMLコードである

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

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

何を意味「動作しない」ん? は、その後、あなたの財産ToolTipStatusこのあるべきイベントとこの

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

などのRaiseメソッドを宣言しますかコンパイラエラー、実行時エラー、エラーメッセージは何ですか? –

+0

エラーメッセージはありません。ツールチップだけは変更されません。 – Pinotek

+0

私たちに示すコードにタイマーはありません。 –

答えて

3

まず、どこにもこのコードでは、あなたのプライベートフィールドが変更された場合、または場合はUIが推測するために何らかの理由があります。第二に、プロパティもプライベートなので、UIもそれを見ることはできません。最後に、文字列に "1"を繰り返し追加すると、タイマーが数回起動した後に"11111111111111111111111111111"のような文字列が得られます。それがあなたの望むものなら、それはいいですが、そうではないかもしれないと思います。

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; 
} 

あなたがビューモデルを持っているかどうかは言いません。あなたはあなたのコードがどのクラスにあるのか、それがどのように呼び出されるのか(あるいは呼び出されるのか)は言わないでしょう。すべてのプロパティはプライベートです。 XAMLがどのように見えるか、またはXAMLが存在する場合でもそのことを言わないでしょう。私はここで強迫的な秘密のテーマを感じる。あなたはいつ開いて共有するかを知る必要があります。

あなたはviewmodelが必要で、INotifyPropertyChangedを実装する必要があります。

0

あなたはxamlをいくらか更新する必要があります。私が思う最良の方法は、フォームをINotifyPropertyChangedから継承することです。

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