특정 변수의 값이 바뀔 때 버튼의 가시성을 토글하고 싶습니다. 값이 변할 때 자동으로 실행되는 변수에 대리자를 연결하는 방법이 있습니까?C#에서 변수 값이 변경되면 어떻게 코드를 실행할 수 있습니까?
답변
아니요, C#에서 오버로드 할당 연산자와 같은 작업을 수행 할 수 없습니다. 변수를 속성으로 변경하고 메서드를 호출하거나 설정자에서 이벤트를 위임하거나 발생시키는 것이 가장 좋습니다.
private string field;
public string Field {
get { return field; }
set {
if (field != value) {
field = value;
Notify();
}
}
}
이것은 속성 변경을 추적하기 위해 많은 프레임 워크에 의해 (WPF DependencyProperty
시스템 등) 이루어집니다.
그렇게 할 방법이 없습니다. 변수는 기본적으로 응용 프로그램이 기록하는 메모리의 장소입니다.
대신 속성 사용 : 당신은 (변수 임) 모델의 GUI에 대한 참조가 직접 setter 메소드의 GUI 변경을 수행하거나, 당신이 당신의 GUI 관찰 할 하나
string myVariable;
public string MyVariable
{
get
{
return myVariable;
}
set
{
myVariable = value;
MyVariableHasBeenChanged();
}
}
private void MyVariableHasBeenChanged()
{
}
작은 관찰 일 경우 변경 한 후에 "MyVariableHasBeenChanged"를 호출하는 것이 좋습니다. 그렇게하면 메서드에서 무언가를 수행 할 수 있고 할당에 예외가 발생하는 경우에 대처할 수 있습니다. –
확실히 더 나은 (그리고 아마도 유일한 유용한 방법). 감사. – weiqure
을 관측자를 통해 모델을 관측하고 관측 가능한 모형을 세터의 관측자에게 알려야합니다. 전자는 결국 스파게티 코드로 이어질 것입니다. 모델과 뷰 사이에 더 많은 직접 링크가 추가되므로 사내 도구와 간단한 프로그램에만 사용해야합니다.
Observer pattern. 여기에 another reference이 있습니다.
이 문제에 대한 해결책으로 옵저버 패턴에 대해 부정적 투표를 정당화 할 수 있습니까? –
당신이 틀렸고 유권자가 머리를 숙이 게해야합니다. 가장 단순한 형태의 옵저버가 올바른 패턴입니다. WPF가 사용하는 것이므로 실제로 WPF에 '무엇이 변경되었는지'를 알려줄 필요가 있습니다. 나는 너를 구제하기 위해 +1 할 것이다. –
Downvote는 링크 전용 답변이기 때문에 의심 스럽습니다. – Blorgbeard
데이터 바인딩 : in WPF을 Windows Forms에 사용할 수도 있습니다. 이를 통해 객체의 속성 인 과 그 반대로에 따라 GUI의 상태를 변경할 수 있습니다.
Mehrdad에게 감사드립니다. – Rohit
이 작업을 수행하는 가장 좋은 방법은'INotifyPropertyChanged' 인터페이스입니다. –