0

我尝试使用“DynamicResource”开发 WPF 应用程序,所以我在 XAML 文件中有 i 标签,如下所示:

   <Window.Resources>
        <local:BindingClass x:Key="myDataSource"/>
        <local:UtilityGioco x:Key="myUtilityGame"  />
    </Window.Resources>

   <Label x:Name="labelTempo" DataContext="{DynamicResource myUtilityGame}" Content="{Binding Path=tempoEsecuzioneEsercizio}" FontFamily="Arial" FontSize="21" 
                           Foreground="Gray" Grid.Column="0" Grid.Row="1" FontWeight="Bold"
                           Margin="15,40,0,0"/>

在 UtilityGioco 类中,我有以下代码:

public string tempoEsecuzioneEsercizio
{
    set;
    get;
}

private void displayTimer(object sender, EventArgs e)
{
    try
    {
        // code goes here
        //Console.WriteLine(DateTime.Now.Hour.ToString() + ":"); 
        if (timeSecond == 59)
        {
            timeSecond = 0;
            timeMinutes++;
        }
        //se il contatore dei minuti è maggiore di 0, devo mostrare una scritta altrimenti un altra
        if (timeMinutes > 0)
        {
            tempoEsecuzioneEsercizio = timeMinutes + " min " + ++timeSecond + " sec";
        }
        else
        {
            tempoEsecuzioneEsercizio = ++timeSecond + " sec";
        }
    }
    catch (Exception ex)
    {
        log.Error("MainWindow metodo: displayTimer ", ex);
    }
}

每次都会调用“displayTimer”方法,但是Label的内容是空白的。

你能帮助我吗?

4

2 回答 2

2

在您的 UtilityGioco 类中实现INotifyPropertyChanged接口并通知tempoEsecuzioneEsercizio属性设置器的更改。

例子:

private string _tempoEsecuzioneEsercizio;
public string tempoEsecuzioneEsercizio
{
    set 
    {
      _tempoEsecuzioneEsercizio = value;
      if (PropertyChanged != null)
      {
        PropertyChanged(this, new PropertyChangedEventArgs("tempoEsecuzioneEsercizio"));
      }         
    }

    get { return _tempoEsecuzioneEsercizio; }
}
于 2014-03-18T15:46:09.013 回答
1

也许你可以使用 INotifyPropertyChanged: http: //msdn.microsoft.com/it-it/library/system.componentmodel.inotifypropertychanged (v=vs.110).aspx

public event PropertyChangedEventHandler PropertyChanged;
private string _tempoEsecuzioneEsercizio;
public string tempoEsecuzioneEsercizio
{
    set 
    {

      if (_tempoEsecuzioneEsercizio != value)
      {
        this._tempoEsecuzioneEsercizio = value;
        this.OnNotifyPropertyChange("tempoEsecuzioneEsercizio");
      }         
    }

    get { return _tempoEsecuzioneEsercizio; }
}


public void OnNotifyPropertyChange(string propertyName)
{
  if (this.PropertyChanged != null)
  {
    this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
  }
}
于 2014-03-18T15:42:00.300 回答