지난 1 시간 동안 Google 및 stackoverflow에서 답변을 찾으려고했습니다. 나는 다른 조언을 따라 & 제안을했지만, 지금까지 아무 일도하지 않았다. 나의 현재 코드는 다음과 같습니다정적 속성이 UI에서 업데이트되지 않습니다.
public class GlobalManager : ViewModelBase
{
static object _LockObject_GFS = new object();
static double _GlobalFontSize;
public static double GlobalFontSize
{
get
{
lock (_LockObject_GFS)
{
_GlobalFontSize = GetGlobalResource<double>(LambdaHelper.MemberToString(() => GlobalFontSize));
return _GlobalFontSize;
}
}
set
{
lock (_LockObject_GFS)
{
if (_GlobalFontSize != value)
{
_GlobalFontSize = value;
SetGlobalResource(value, LambdaHelper.MemberToString(() => GlobalFontSize));
NotifyStaticPropertyChanged(() => GlobalFontSize);
}
}
}
}
}
게터 & 세터가 모두이라고합니다. NotifyStaticPropertyChanged
이 작동하고 UI가 업데이트되지 않습니다. 업데이트 여부를 확인하기 위해 TextBlock
을 추가했습니다. 분명히 그렇지 않습니다.
<TextBlock Text="{Binding Path=(global:GlobalManager.GlobalFontSize), Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
내 VM (현재의 DataContext)의 속성을 정의하고, TextBlock
에 바인딩 경우, 현재의 값을 올바르게 업데이트합니다.
현재 글꼴 크기를 업데이트하기 위해 Slider
의 DependencyProperty
Value
이이 속성에 바인딩됩니다. (IsSnapToTickEnabled="True"
)
public double GlobalFontSize
{
get { return GlobalManager.GlobalFontSize; }
set { GlobalManager.GlobalFontSize = value; NotifyPropertyChanged(() => GlobalFontSize); }
}
는 어떻게 정적 속성을 제대로 작동하려면 바인딩을받을 수 있나요? StaticPropertyChanged
이벤트가 null이 아닙니다.
StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs(propertyName));
편집 1 :
public static void NotifyStaticPropertyChanged(string propertyName)
{
StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs(propertyName));
}
public static void NotifyStaticPropertyChanged<T>(Expression<Func<T> > property)
{
var expr = property.Body as MemberExpression;
if (expr == null)
throw new ArgumentException("Lambda does not contain member expression.() => MyClassOrObject.Property");
NotifyStaticPropertyChanged(expr.Member.Name);
}
MM8 @'StaticPropertyChanged 이벤트는 내 서명이 올바른지 null.'되지 않습니다. – Blacktempel
NotifyStaticPropertyChanged 메서드는 어떻게 구현됩니까? – mm8
@ mm8 "일반"구현과 비슷합니다. 내 편집을 참조하십시오. – Blacktempel