如何使用Label内容的DynamicResource?

时间:2014-03-18 15:38:40

标签: c# wpf label dynamicresource

我尝试用“DynamicResource”开发一个WPF应用程序,所以我在XAML文件中使用了这样的标签:

   <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的内容为空。

你能帮助我吗?

2 个答案:

答案 0 :(得分:2)

在UtilityGioco类中实现INotifyPropertyChanged接口,并通知tempoEsecuzioneEsercizio属性的setter中的更改。

示例:

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

    get { return _tempoEsecuzioneEsercizio; }
}

答案 1 :(得分: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));
  }
}