2010-07-21 2 views
0

는 꽤 자주 선언 DataContext를 함께 WPF UserControl을 설정합니다 :Visual Studio 2010에서 WPF XAML을 무시하도록 강제로 설정하는 방법 디자인 타임에 DataContext가 선언 되었습니까?

<UserControl...> 
    <UserControl.DataContext> 
     <local:SomeModel x:Name="Model" /> 
    </UserControl.DataContext> 
</UserControl> 

하면 디자인 모드에서, 비주얼 스튜디오는 DataContext의 인스턴스를 시도합니다.

이 "SomeModel"의 인스턴스를 만들 수 없습니다 : DataContext를 구성 파일에서 데이터를 당기고 그러나, 비주얼 스튜디오 2010과 같은 오류가 발생합니다.

오류가 발생하면 디자인 시간 경험은 거의 없거나 아무런 가치가 없습니다. DataContext를 주석 처리하면 Visual Studio 2010 디자인 모드가 예상대로 작동하고 DataContext는 처리되지 않습니다.

Visual Studio에서 디자인 타임에 XAML이 선언 된 DataContext를 무시하도록 할 수있는 방법이 있습니까?

+0

2010 년부터 순수 XAML 방법을 찾아 냈습니까? – Olwaro

+0

순수 XAML 메서드가 없습니다. 문제는 디자이너가 모델을 인스턴스화하려고 시도하는 것입니다. 모델을 작성하는 데 필요한 종속성이 있으면 인스턴스화가 실패합니다. –

답변

1

나는 완전히 확실하지 이해하지만, 나는 디자이너가 내 코드 실행 중일 때 감지하는이 확장 방법을 사용하십시오

public static class Extensions 
{ 
    public static bool IsDesigner(this Process process) 
    { 
     if (process.MainModule != null) 
      return (process.MainModule.ModuleName.Contains("devenv.exe")); 

     return false; 
    } 
} 
+0

확장은 좋은 해결 방법입니다. 잠시 질문을 던져서 누군가 순수 XAML 해결 방법을 가지고 있는지 확인하고 싶습니다. 감사! –

+0

디자이너가 devenv.exe가 아닌 경우 ... Blend 또는 기타 XAML 편집 도구 등. 나는 아래의 해답이 더 안전하다고 생각한다. –

4

재정의 (또는 '새'와 숨기기)를 데이터 컨텍스트 및 시스템의 활용 .ComponentModel.DesignerProperties.GetIsInDesignMode() 적절한 컨텍스트를 반환합니다.

보너스 포인트를 얻으려면 전 처리기 지시문에서 조건부 해체를 수행하고 /하거나 현명한 ConditionalAttribute()를 사용하여이 추가 노이즈가 프로덕션 환경으로 나오지 않도록하십시오.

+0

누군가이 예제를 추가 할 수 있습니까? – SteveCav

+0

@ SteveCar- VM 생성자에서 : if (DesignerProperties.GetIsInDesignMode (new DependencyObject())) { return; } – RichardOD