2010-05-11 2 views
10

(정직하게 말하면 관련성이있는 모든 '관련 질문'을 검색하고 읽었습니다. 다른 곳에서이 질문을 "놓치지"않았 으면 좋겠지 만 여기에 ...)어디에서 DataContext-code behind 또는 xaml을 설정해야합니까?

두 가지 방법이 있습니다. 최소한) DataContext를 설정합니다. XAML을 사용할 수도 있고 코드를 사용할 수도 있습니다.

'모범 사례'는 무엇이며 그 이유는 무엇입니까?

디자이너가 독자적으로 컬렉션을 정의 할 수 있기 때문에 XAML에서 설정하는 편이 좋지만 왜 모범 사례인지 또는 왜 내가 미쳐서 코드가 숨겨진지를 '탄약'이 필요합니다.

답변

2

나는 그것이 당신이 DataContext를 설정하고 궁극적으로 개인적인 취향에 달려 있다고 생각한다.

필자가 전반적으로 더 깨끗해 졌기 때문에 개인적으로 항상 내 견해의 배후에서 코드를 작성합니다. MVVM을 배운 방법이었습니다. 염두에 두어야 할 또 다른 사항은 작업하는 항목에 따라 데이터 인터페이스를 변경해야 할 수도 있습니다. 이 경우 XAML이 아닌 코드에서 훨씬 더 깔끔하고 쉽게 처리 할 수 ​​있습니다.

0

사용자 정의 컨트롤/뷰의 DataContext로 가정합니까? 코드에서 데이터 컨텍스트를 설정하는 한 가지 장점은 종속성 주입의 가용성입니다. DI 컨테이너는 런타임에 동적으로 의존 관계를 처리 할 수 ​​있습니다.

이 패턴을 사용하여 d : DataContext를 사용하여 xaml에서보기의 블렌드 디자인 DataContext를 자주 설정합니다. "디자인 버전"은 Blend에서 모의 ​​데이터를 제공 할 수 있으며, 실제 구현은 런타임에 해결됩니다.

+0

이것이 내가 찾고있는 것입니다. 개인적으로 xaml에서 설정하는 것을 선호합니다. 나를 위해 코드를 설정하는 것은 까다로운 일이 될 수 있습니다. * 어디에서나 datacontext를 설정할 수 있기 때문에 때로는 '어디서'가 고통인지를 추적 할 수 있습니다 ... 이것은 한 가지 방법을 사용하는 이유의 유형에 따라 더 가깝습니다 또는 다른 '내가 찾고있어 ...(이 경우 조화 된 '조롱 된 데이터'는 '이유'입니다.) – dovholuk

4

세 번째 방법은 로케이터 서비스를 사용하는 것입니다. 일반적으로 모든 DataContext (대부분의 경우 VM)의 생성을 담당하는 클래스가 하나 있고 App.xaml 리소스에서 해당 클래스의 인스턴스를 만듭니다. 그런 다음 각 개별 페이지의 XAML에서 DataContext를 바인딩합니다.

<Page DataContext="{Binding ViewModel,Source={StaticResource Locator}}" > 
1

지금까지 의견이 나누어 답변에서 볼 수 있듯이. 실제로는 모범 사례가 없습니다. Silverlight 세계에서 "모범 사례"라는 단서에 대해 이야기하고, 모범 사례가 너무 알려지지 않은 방법을 사용하여 실례를 알 수 있습니다. 실제로는 모범 사례가 없습니다. Xaml에서 "데이터 컨텍스트"를 설정할 수 없습니다. 실제로이 같은 개체 인스턴스를 생성하지 않는 : - 외부

<UserControl> 
    <UserControl.DataContext> 
    <local:MyDataProviderThing /> 

궁극적으로 뭔가 다른 속성을 통해 또는 (스테판의 대답으로) 결합을 통해 직접 또는 간접적으로의 DataContext 속성 중 하나를 할당 할 수 있습니다. 이 외부 컨텍스트는 Xaml에서 수행할지 여부를 결정합니다. 많은 MVVM 솔루션은 Xaml에서 바인딩을 사용합니다. 일부 경우에는 단순히 코드 숨김으로 코드가 있어야하는 것을 피하는 것이 아니라 "더 나은"코드라고합니다. 다른 컨트롤에서 파생되는 기본 클래스를 사용하여 코드에서 DataContext를 설정합니다.

+0

스테판의 게시물은 xaml을 통해 datacontext를 설정하는 방법을 잘 보여줍니다 (어쨌든 나에게 잘 전달). 그래서 당신이 말할 때 의미하는 바를 명확히 할 수 있습니다 xaml에서 datacontext를 설정할 수 없습니까? 감사합니다 – dovholuk

+1

@dovholuk : "데이터"에서 "데이터 컨텍스트"를 사용합니다. 예, Xaml의 DataContext 속성에 개체를 할당 할 수 있습니다. 그러나 Stephan의 대답에 따르면 실제로 할당 된 모든 데이터가 '바인딩'입니다. 그 자체가 정말로 "데이터 컨텍스트"는 아닙니다. "데이터 컨텍스트"가되도록 할당 된 실제 객체는 Locator라는 정적 리소스에 할당 된 객체의 ViewModel 속성에 코드로 수행됩니다. – AnthonyWJones

관련 문제