2011-04-14 5 views
0

현재 사용하고 싶은 GUI 응용 프로그램 (윈도우 폼)의 백엔드 엔진으로 사용할 C# dll을 작성하고 있습니다. 엔진은 미리 정의 된 몇 가지 상태 중 하나에있을 수 있습니다. Loading, Idle, Working 등. 배경 작업자가 제어합니다. 이 dll을 사용하는 GUI 응용 프로그램이 작업을 수행하고 엔진 내 속성, 특히 엔진이있는 현재 상태에 컨트롤 속성을 바인딩 할 수있게하려고합니다. 예를 들어 엔진을 사용하는 응용 프로그램이 엔진 작동 여부. 다음과 같이 내가 엔진 내에서 읽기 전용 속성을 만든이 작업을 수행하려면바인딩 버튼. C# dll의 속성에 사용 가능

국가는 모든 가능한 상태의 열거하고 EngineState 현재 상태
public Class Engine 
{ 
    // Make the class a singleton 
    private static Engine instance; 
    public static Engine Instance 
    { 
     get 
     { 
      if (instance == null) 
       instance = new Engine(); 
      return instance; 
     } 
    } 

    // ... Class code altering the engines current state 

    public bool Property IsActive 
    { 
     get 
     { 
      return (EngineState != State.Idle); 
     } 
    } 
} 

. 이 속성을 테스트하려면 엔진이 활성 상태 인 경우 단추를 사용 가능하게하려는 빠른 Windows 양식 응용 프로그램을 작성했습니다.

public Class TestApp 
{ 
    Engine MyEngine = Engine.Instance; 

    TestApp 
    { 
     Button_DoAction.DataBindings.Add("Enabled", MyEngine, "IsActive"); 
    } 

    // ... Button handlers etc. 
} 

이 바인딩

은 DLL 내 재산이 isActive 변화, 즉 엔진 액티브 모드에서 아이들 모드가되면 때 응용 프로그램이 처음로드하지만 작동하는 것 같다의 : 나는 Enabled 속성과 같이 바인딩 해봤이 작업을 수행하려면 단추의 Enabled 속성은 변경되지 않습니다.

그래서 내가하려는 일이 가능할 지 궁금합니다. 엔진이 싱글 톤이며 외부 DLL에 기록된다는 사실은 다른 것을 의미합니까? 모든 의견은 큰 도움이 될 것입니다.

미리 감사드립니다.

+0

죄송합니다. 아니면이 WPF입니까? – Jodrell

답변

2
엔진이 System.ComponentModel.INotifyPropertyChanged

인터페이스가 엔진 뭔가

(당신이 뭔가가 그 변화에 대응하려면 적어도 경우) 변경되었을 때 발생합니다 이벤트 "ProperyChanged"가

를 구현해야

MSDN http://msdn.microsoft.com/en-gb/library/system.componentmodel.inotifypropertychanged%28v=vs.95%29.aspx

+0

답장을 보내 주셔서 감사 드리며, 처음 시도했습니다. 간단한 해결책과 좋은 간단한 설명 :) 다시 한번 감사드립니다. – TheRarebit

0

Windows 양식을 텍스트로 사용하는 경우 이벤트를 발생 시키거나 대리자를 다시 호출해야합니다.

양식은 이벤트/위임에 가입하고 그에 따라 행동 할 수 있습니다.

코드로 WPF를 사용하는 경우 DarkSquirrel42의 조언을 받아 INotifyPropertyChanged 인터페이스를 구현하십시오.