내 목표는 내 응용 프로그램에서 데이터, 환경 설정 등을 공유하는 singletin을 사용하는 것입니다. 전체 응용 프로그램에서 싱글 톤으로 만들고 싶다면 2 방향 바인딩 가능 INotify를 사용하여 WPF에서.WPF 바인딩을위한 INotify를 사용하여 설정을위한 정적 싱글 톤/저장소 만들기
읽을 수 있습니다 .net 4.5는 StaticPropertyChanged
을 활용할 수 있습니다. 따라서 문서화가 어떻게 구현 될지 궁금해 할 것입니다.
public static class Global
{
public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;
private static void CallPropChanged(string Prop)
{
StaticPropertyChanged?.Invoke(Settings, new PropertyChangedEventArgs(Prop));
}
private static Store Settings = new Store();
public static int setting1
{
get { return Settings._setting1; }
set { if (value != Settings._setting1) { Settings._setting1 = value; CallPropChanged("setting1"); } }
}
}
internal sealed class Store
{
internal int _setting1;
}
내가 원하는 것을 올바르게 추적하고 있습니까?
편집 : 제작 일부 수정 :
public sealed class Global:INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
static readonly Global _instance = new Global();
private int _setting1;
private int _setting2;
private void CallPropChanged(string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private bool SetField<T>(ref T field, T value, [CallerMemberName] string propertyName = null)
{
if (EqualityComparer<T>.Default.Equals(field, value)) return false;
field = value;
CallPropChanged(propertyName);
return true;
}
private Global() { }
public static int setting1
{
get { return _instance._setting1; }
set { _instance.SetField(ref _instance._setting1, value); }
}
public static int setting2
{
get { return _instance._setting2; }
set { _instance.SetField(ref _instance._setting2, value); }
}
}
시도해 본 결과가 좋았습니까? 그렇다면 귀하의 질문은 무엇입니까? 그렇지 않다면 무슨 일이 일어나고 무엇이 _ 구체적으로 도움이 필요합니까? 만약 당신이 싱글 톤을 구현했다면 (게시 한 코드는 그런 것을 수행하지 않습니다), 싱글 톤 객체 자체는 평소처럼'INotifyPropertyChanged'를 구현할 수 있습니다. 질문을 개선하여 실제로 문제가있는 것이 무엇인지 분명하게 이해하십시오. 실행중인 모든 문제를 확실하게 재현 할 수있는 좋은 [mcve]를 포함시켜야합니다. –
@PeterDuniho 싱글 톤을 생성하는 정적 인 방법으로 인스턴스 저장소를 정의하지 않습니까? 또는 각 호출에서 상점의 새 인스턴스를 계속 작성합니까? static에 바인드하고 싶습니다. static은 INotify를 구현할 수 없습니다. – Wobbles
_ "싱글 톤을 생성하는 정적 한 방법으로 인스턴스 저장소를 정의하지 않습니까?" "싱글 톤"이라는 용어는 매우 구체적인 의미를 지니 며 게시 한 코드에는 적용되지 않습니다. 싱글 톤을 사용하면 클래스의 _single_ 인스턴스를 반환하는 public static 속성을 갖지만 클래스 자체와 모든 멤버는 정적이 아닙니다. 그런 다음 인터페이스 (예 :'INPC')를 구현할 수 있습니다. _Stead__'StaticPropertyChanged'를 사용할 수도 있지만, 이것은 싱글 톤이 아닙니다. WPF가 처리 할 수있는 정적 클래스 일뿐입니다. 예 : [이 답변] (http://stackoverflow.com/a/9786554). –