我尝试用“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的内容为空。
你能帮助我吗?
答案 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));
}
}