2014-07-30 2 views
0

우선, WPF 및 바인딩에 관한 super-noob 질문에 대해 사과드립니다. 며칠 전 WPF와 Visual Studio Express 2013의 C# 코드 숨김으로 WPF 및 그 구현에 관심을 갖기 시작했습니다. 그리고 단추의 내용을 일부의 속성에 바인딩하려고합니다. 싱글 톤 클래스. 그리고 분명히 나는 ​​할 수 없다.XAML 마크 업에 싱글 톤 속성 바인딩

내가 원하는 것은 다음과 같습니다. 버튼을 "시작"이라고 말하면서 클릭 할 때 버튼의 내용이 타이머 + 멈춤으로 바뀌도록하고 싶습니다. "00:00:02 - 중지 "를 클릭하고 다시 클릭하면"시작 "으로 다시 변경됩니다.

나는 내가 앞뒤로 "Start" 또는 stopwatch.Elapsed.TotalSeconds.ToString() + "Stop"에 하나를 변경 인스턴스 System.Diagnostics.Stopwatchstopwatch 및 문자열 속성을 포함하는, 한 번 이상 인스턴스화되는 것을 방지하기 위해 싱글로 설계 한이 클래스가 있습니다.

문제는 XAML 마크 업에서 내 싱글 톤 클래스를 참조하려고 할 때 (솔직히 말해서, 내가하는 일을 실제로 알지 못한다는 것입니다. 나는) 웹을 통해 발견했습니다

<Window 
    ... 
    xmlns:local="clr-namespace:myNameSpace"> 

    <Grid> 
     <local:mySingleton x:Key="myStringProperty" /> 
     ... 
    </Grid> 
</Window> 

내가 어떤 말을있는 컴파일러 오류 (총 6 개)의 회전 수 : ". 타입 mySingleton가 액세스 가능한 생성자를 포함하지 않습니다" 및 ""키 "특성은"IDictionary "에 포함 된 요소에서만 사용할 수 있습니다."

나는 생성자를 public으로 만들고 싶지 않다는 것을 알기 때문에 무엇을 해야할지 알지 못한다. 따라서 싱글 톤을 없애라.

올바른 방향으로 향하는 포인터가 있습니까?

도움을 주셔서 감사합니다.

+0

싱글 톤을 제거하십시오. XAML 문제 때문이 아니라 기회가 있기 때문에 잘못된 패턴입니다. 왜 싱글 톤이 필요합니까? 싱글 톤은 당신이 가지고있는 모든 단위 테스트를 깰 것입니다. – nvoigt

답변

0

처음에는 문자열 속성을 표시하는 데 문제가 있습니다. 당신은 텍스트 상자를 사용하여 다음 바인딩 텍스트 속성을 사용해야합니다 :

<TextBox Text="{Binding Path=myStringProperty}"/> 

은 또한 당신이 Window.DataContext하고 속성 클래스 (뷰 모델) OnPropertyChanged를 이벤트를 호출 한 설정해야합니다 (참조 : WPF: simple TextBox data binding를) .

이제 싱글 톤에 대해. 싱글 톤은이 용도로 사용하면 안됩니다. 창 (보기)이 있어야하며 해당 창은 일부 클래스 (보기 모델, 하나의 창당 하나의 인스턴스가 있음)와 작동해야하며 더 많은 창을 함께 실행하고 항상 동일한 결과를 원할 경우 해당보기 모델에서 어떤 정적 객체를 가져야한다. (그것은 그 타이머 일 수도 있고, 그 클래스 내부에서 싱글 톤이 될 수있는 타이머로부터 결과를 얻는 것에 대한 요청을 처리 할 어떤 클래스 일 수도있다.) 그래서 그것은 Window (view) -> view model class -> static timer/class처럼 보일 수 있습니다.

관련 문제