문제

MVVM 전문 지식을 가진 사람이 다음이 좋은 생각인지에 대한 의견을 제시 할 수 있기를 희망하면서 여기에 게시 할 것이라고 생각했습니다.

Marlon Grech의 Simplecommand 클래스를 포함하여 Sacha Barber의 Cinch MVVM 프레임 워크를 사용하고 있습니다.

이 클래스에 다른 대안이 가지고 있지 않은 한 가지는 텍스트 속성이며, 일반적으로 UI 요소를 명령 작업의 '제목'에 바인딩하는 데 사용할 수 있습니다. 결과적으로 나는 텍스트 속성을 노출시키는이 클래스에 연장을 작성해 왔습니다.

이제 제가 실행하는 것은 명령을 사용하여 장치에 연결을 전환하는 사용 사례입니다. 내가 이것을 구현할 수있는 다양한 방법이 있습니다 (항상 존재하지는 않습니다 - 그것은 소프트웨어입니다!). 한 가지 방법은 내 뷰 모델에서 여러 명령 객체를 노출시키는 것입니다. 뷰 모델에 연결 상태를 나타내는 속성 (ISConnected)을 노출시키고 Connect 명령 또는 연결 해제 명령에 조건부로 뷰가 결합됩니다. 그래도이 옵션에 대한 나의 반응은 ... yuck!

처음에보기 시작한 것은 텍스트 속성을 제공 할뿐만 아니라 명령 개체가 inotifyPropertyChanged를 구현하여 뷰 모델에 의해 시스템 상태에 따라 '연결'또는 '분리'하도록 텍스트 속성을 동적으로 변경할 수 있도록하는 것이 었습니다. 이렇게하면 여러 명령을 피하고 단일 'ToggleConnection'명령 개체를 노출시킬 수 있습니다.

그러나이 경로를 시작하면, 명령 상태에 따라 UI를 변경 해야하는이 패턴의 다른 변형이있을 수 있습니다. 예를 들어, 연결 상태에 따라 명령의 텍스트를 변경하는 것 외에도 연결 상태에 따라 아이콘을 변경 해야하는 장소가있을 수 있습니다. 그래서 나는 inotifypropertychanged를 구현하는 'Stateful'수업을 작성하기 시작했으며 '텍스트'와 '상태'라는 두 가지 속성을 노출시킵니다. 나는 클래스를 일반적인 상태로 만들었으므로 상태 유형을 사용자가 정의 할 수 있습니다 (일반적으로 피할 수없는 경우 '개체'를 사용하지 않는 것이 좋습니다).

내가 가진 질문은 ... 이것이 좋은 또는 나쁜 생각이라고 생각합니까? 명령의 원래 의도 / 디자인에서 분기 될 수 있습니다. 내가 본 것에서 일반적으로 명령 개체가 시스템의 '동사'이기 때문에 명령 개체가 무국적으로 의도 된 경우 일 수 있습니다. 라우팅 된 명령을 사용하면 사물을 올바르게 이해하면 명령의 목표 만 일반적으로 상태를 가질 것으로 예상됩니다. 특히 명령 바인딩이 선언되는 위치에 따라 동일한 명령이 다른 핸들러로 라우팅 될 수 있기 때문에.

따라서 적어도 라우팅 된 명령으로 상태는 의미가 없을 것이라고 생각합니다.

그러나 나는 라우팅 된 명령을 다루지 않습니다 - 특히 MVVM 명령을 다루고 있습니다. 이 경우 기본적으로 명령의 조건부 라우팅이 없습니다.

이 경우 의미가 있습니까?

사용/관심이있는 경우 해당 코드 사본을 첨부했습니다.

고마워요, 필

도움이 되었습니까?

해결책

당신이 함께 일하기가 더 쉬울 것이라고 생각하는 것은 정말 당신에게 달려 있습니다.

나는 개인적 으로이 명령에서 재사용을받지 않기 때문에 .text 속성을 내 명령에 넣지 않습니다. 프레임 워크 (또는 유사한 사용자 지정 정적 명령)에 제공된 Routeduicommands와는 다르며, 이들은 어디서나 재사용되기 때문에 "종료"의 번역이 해당 명령에 따라 변경되면 응용 프로그램 전체에 반영됩니다. 예에서는 그렇지 않습니다. 모든 것이 일회성 일 것입니다.

귀하의 경우 버튼 텍스트 의이 텍스트는 실제로 명령에서 분리되어 있습니다 (하나는 다른 사람에게 영향을 미치더라도). 아마도 더 쉽게 만들어 질 것입니다. 그다지 많으면 무엇보다 맛의 문제가 될 것입니다.

나는 확실히 두 가지 명령에 대해 당신과 함께 있습니다 -Blech. 당신이 쓰는 대부분의 버튼 대의원은 어떤 방식 으로든 상태에 반응해야합니다 (사용자가 아래에있는 서비스는 아래 에이 데이터를 채워야합니다. 대의원은 뷰 모델에 대한 상태 정보에 적응합니다.

어쨌든, 이것은 약간 말이 많습니다 ... 테이크 아웃은 "편안한 느낌이 든다"는 것입니다.

다른 팁

마지막 포스터처럼 "편안함이 무엇이든."

제 경우에는 보통과 같은 것을 사용합니다. 대표 명령. 일부 데이터에 결합 해야하는 경우 VM에 바인딩합니다. 명령이 실행되면 내 VM 내에서 실행됩니다 (elegatecommand에 제공된 대의원을 통해). 그런 다음 실행 된 대의원은 명령을 만족시키기 위해 재사용 가능한 코드를 실행할 수 있습니다.

명령을 자체 VM으로 사용하고 싶은 것처럼 들립니다. 나는 이것을 나 자신 앞에서 생각하지 않았지만, 그것이 당신에게 기분이 좋다면, 그것을하십시오! :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top