的價值我有一個ViewModelBase類,如下所示:的觀點是沒有得到通知時,靜態屬性更改
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public static event PropertyChangedEventHandler GlobalPropertyChanged = delegate { };
public static void OnGlobalPropertyChanged(string propertyName, Type className)
{
GlobalPropertyChanged(className,new PropertyChangedEventArgs(propertyName));
}
}
現在,我還有一個視圖模型稱爲GroupViewModel它繼承ViewModelBase:
public class GroupViewModel : ViewModelBase
{
public GroupsViewModel()
{
CurrentGroup = new Group();
}
private static Group _currentGroup;
public static Group CurrentGroup
{
get
{
return _currentGroup;
}
set
{
_currentGroup = value;
OnGlobalPropertyChanged("CurrentGroup", typeof(Group));
}
}
}
現在Groups.xaml Page:
<Grid DataContext="{Binding CurrentGroup}">
.....
.....
<TextBlock Text="{Binding GroupName, TargetNullValue=''}" />
.....
.....
</Grid>
我有另一個叫做MainWindowViewModel的ViewModel,I t RY到CurrentGroup保存到數據庫如下面的代碼,然後我設置CurrentGroup = new Group();
但Group.xaml TextBox的文本沒有被清除:
Group group = GroupViewModel.CurrentGroup;
db.Groups.Add(group);
db.SaveChanges();
GroupViewModel.CurrentGroup = new Group();
更新:
如果我使用GroupsViewModel下面的代碼,產量如預期。我的意思是更新靜態屬性更改時視圖。
public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged
= delegate { };
private static void NotifyStaticPropertyChanged(string propertyName)
{
StaticPropertyChanged(null, new PropertyChangedEventArgs(propertyName));
}
如果我使用的是在ViewModelBase相同的代碼(請注意,GroupsViewModel繼承ViewModelBase),那麼不更新視圖時的靜態屬性的變化值。在這種情況下,我還將NotifyStaticPropertyChanged標記爲public,以避免編譯時錯誤,如有關保護級別的錯誤。
嘗試提供的解決方案[此處](http://10rem.net/blog/2011/11/29/wpf-45-binding-and-change-notification-for-static-properties)。 –
必須提高viewmodel的屬性更改事件,靜態成員不是實例的成員。 – Silvermind
@RohitVats好的,我會嘗試一下,讓你知道。 – Vishal