programing

WPF의 더미 디자인 타임 데이터에 사용할 수 있는 접근방식은 무엇인가?

i4 2023. 4. 11. 21:39
반응형

WPF의 더미 디자인 타임 데이터에 사용할 수 있는 접근방식은 무엇인가?

vs2010의 를 사용하지 작업하고 .이와는 별개로 디자인 타임 데이터 바인딩의 필요성이 높아지고 있습니다. 「 」는,FallbackValue속성은 매우 적절하게 작동합니다(텍스트 상자 및 텍스트 블록 등).하지만 특히나 이 문제를 해결할 때ItemsControl예를 들어, 실행 파일을 실행하지 않고도 컨트롤과 데이터 템플릿을 조정하고 조정할 수 있도록 설계자에 샘플 데이터를 표시해야 합니다.

는 그것을 있다.ObjectDataProvider는 유형에 대한 바인딩을 허용하기 때문에 시각화를 위한 디자인 타임 데이터를 제공할 수 있습니다.다만, 설계 시간, 더미 데이터, 런타임 바인딩을 모두 로드하는 것으로 자원을 낭비하지 않고 실제 런타임 데이터를 바인딩할 수 있도록 하는 저글링이 있습니다.

가 정말로 은, 를 들면 「John 「 「 「John」의입니다.ItemsControl응용 프로그램 실행 시 실제 데이터가 표시됩니다.

또한 Blend는 런타임 조건에서 WPF에 의해 효과적으로 무시되는 디자인 타임바인딩 데이터를 정의하는 몇 가지 화려한 속성을 허용한다는 것도 알고 있습니다.

그래서 질문하겠습니다.

1. Visual Studio XAML designer에서 컬렉션 및 중요하지 않은 데이터의 디자인 타임 바인딩을 활용하여 런타임 바인딩으로 원활하게 전환하려면 어떻게 해야 합니까?

2. 다른 사람들은 이 디자인 타임과 런타임 데이터 문제를 어떻게 해결했습니까?제 경우, 두 가지 모두에 대해 동일한 데이터를 쉽게 사용할 수 없습니다(예를 들어 데이터베이스 쿼리를 사용할 수 있는 경우).

3. 데이터 통합 XAML 설계에 사용할 수 있는 표현 블렌드 대신 사용할 수 있습니까?(대안이 몇 가지 있는 것은 알지만, 특별히 사용할 수 있는 것, 바인드된 샘플 데이터 등을 보고 싶다고 생각하고 있습니다.

VS2010을 사용하면 Design-Time Atribut을 사용할 수 있습니다(SL과 WPF 양쪽에 대응).저는 보통 모의 데이터 소스를 가지고 있기 때문에 다음 사항만 해결합니다.

  • 네임스페이스 선언 추가

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    
  • 창/제어 리소스에 모의 데이터 컨텍스트 추가

    <UserControl.Resources>
      <ViewModels:MockXViewModel x:Key="DesignViewModel"/>
    </UserControl.Resources>
    
  • 디자인 타임 데이터 컨텍스트 설정

    <Grid d:DataContext="{Binding Source={StaticResource DesignViewModel}}" ...
    

충분히 효과가 있다.

Goran의 인정된 답변과 Rene의 훌륭한 코멘트를 혼합한 것입니다.

  • 네임스페이스 선언을 추가합니다. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

  • 코드에서 설계 시간 데이터 컨텍스트를 참조합니다.
    <Grid d:DataContext="{d:DesignInstance Type=ViewModels:MockXViewModel, IsDesignTimeCreatable=True}" ...

이 방법을 사용하여 설계 시간 데이터를 생성합니다.NET 4.5 및 Visual Studio 2013.

「모델」을 참조해 주세요.이 있습니다.IsInDesignMode(클래스 「클래스」를 해 주세요.ViewModelBase그런 다음 뷰 모델 생성자에서 설계 시간 데이터(항목 컨트롤 채우기 등)를 설정할 수 있습니다.

또한 뷰 모델 컨스트럭터에 실제 데이터를 로드하지 않기 때문에 실행 시 문제가 발생할 수 있지만 설계 시간에 데이터를 설정하는 것은 문제가 되지 않습니다.

public abstract class ViewModelBase
{
    public bool IsInDesignMode
    {
        get
        {
            return DesignerProperties.GetIsInDesignMode(new DependencyObject());
        }
    }
}

public class ExampleViewModel : ViewModelBase
{
    public ExampleViewModel()
    {
        if (IsInDesignMode == true)
        {
            LoadDesignTimeData();
        }
    }

    private void LoadDesignTimeData()
    {
        // Load design time data here
    }       
}

Karl Shifflett은 VS2008과 VS2010에서도 동일하게 기능해야 할 접근방식을 설명합니다.

WPF 및 Silverlight 프로젝트에서 Visual Studio 2008 Cider Designer 설계 시간 데이터 표시

Laurent Bugnion은 Expression Blend에 초점을 맞춘 비슷한 접근법을 가지고 있다.VS2010에서는 동작할 수 있을지도 모릅니다만, 아직 확인하지 못했습니다.

Microsoft Expression Blend의 설계 모드에서 데이터 시뮬레이션

Visual Studio 2010과 Expression Blend 4의 새로운 디자인 타임 기능이 귀하를 위한 옵션일 수 있습니다.

WPF Application Framework(WAF)BookLibrary 샘플애플리케이션에 그 구조를 나타냅니다.를 다운로드해 주세요.NET4 버전

상위 등급의 답변과 비슷하지만 내 의견으로는 다음과 같다.다음과 같이 정적 속성을 생성하여 설계 데이터의 인스턴스를 반환하고 XAML에서 직접 참조할 수 있습니다.

<d:UserControl.DataContext>
    <Binding Source="{x:Static designTimeNamespace:DesignTimeViewModels.MyViewModel}" />
</d:UserControl.DataContext>

하면 , 용, 용, this, 사, this 、 this 、 this 、 this 、 this 、 this 。UserControl.Resources스태틱 속성은 단순한 데이터 타입을 구축할 수 있는 팩토리로서 기능할 수 있습니다.예를 들어 기본 ctor가 없는 경우 공장이나 컨테이너를 호출하여 적절한 의존관계를 주입할 수 있습니다.

는 Visual Visual Studio 2017을 .<ItemsControl>은 단순히 .DesignFooViewModel로부터 계승한다.FooViewModel이 MSDN 가이드(스포일러:MessageBox이것은 원래의 질문과는 직접적인 관계가 없지만, 다른 사람의 시간을 많이 절약해 주었으면 한다.

알고보니 난 잘못한 게 없었어문제는 어플리케이션을 x64용으로 빌드해야 한다는 것이었습니다.Visual Studio는 아직 2018년에 32비트 프로세스로 디자이너 파트의 64비트 호스트 프로세스를 스핀할 수 없기 때문에 x64 클래스를 사용할 수 없습니다.정말 안 좋은 점은 제가 생각할 수 있는 어떤 로그에도 오류가 없다는 것입니다.

되어 이 " " " " " " " " " " " " " " " " ) 。<TextBlock Text="{Binding Name}"/>Name어떤 속성을 설정했더라도) 원인은 x64 빌드에 있을 수 있습니다.종속성 때문에 빌드 구성을 anycpu 또는 x86으로 변경할 수 없는 경우 완전히 anycpu이며 종속성(또는 종속성)이 없는 새 프로젝트를 생성하는 것이 좋습니다.따라서 "WPF App" 프로젝트에서 코드의 초기화 부분을 제외한 나머지 부분 또는 대부분을 "C# 클래스 라이브러리" 프로젝트로 분할할 수 있습니다.

제가 작업하고 있는 코드 베이스에 대해서는, 이것은, 몇개의 코드 복제의 대가를 치르고, 건전한 염려의 분리를 강요할 것이라고 생각합니다.이것은 아마도 순긍정적인 것일 것입니다.

앱에서 jbe의에 들었습니다.- WAF에서는 의 모의 뷰 합니다.DesignData 다음에 XAML에 .

mc:Ignorable="d" 
d:DataContext="{d:DesignInstance dd:MockHomeViewModel, IsDesignTimeCreatable=True}"

서 (어디서)dd 가리키다.DesignData(여기서 '네임스페이스')MockHomeViewModellives)

이 기능은 매우 간단하며(마음에 들어!), 실제 VM에서 상속하여 더미 데이터만 제공할 수 있습니다.설계 시간 전용 코드로 실제 VM을 오염시킬 필요가 없으므로 모든 것을 분리할 수 있습니다.IOC 등을 활용한 대규모 프로젝트에서는 상황이 달라 보일 수 있지만 소규모 프로젝트에서는 잘 작동합니다.

그러나 Junas가 지적한 바와 같이 VS2017의 x64 빌드는 작동하지 않으며 VS2019(V2019 16.6 Community Edition을 사용하고 있습니다)도 마찬가지인 것 같습니다.처음 작업을 시작할 때 안절부절못하는 것은 아니지만 변경을 가한 후(보통 몇 가지 변경!) 갑자기 작동을 멈추면 머리를 긁적거릴 수 있습니다.

새로운 심플한 WPF 프로젝트(뷰 모델, 뷰 모델, 모의 VM 등)를 생성하여 조작하는 것을 추천합니다.작동시킨 후 중단합니다.솔루션 클리닝과 재구축으로 문제를 해결할 수 없는 경우가 종종 있었습니다. 유일한 방법은 VS를 종료하고 재시작하는 것이었고, 갑자기 설계 시간 데이터가 복구되었습니다.

언급URL : https://stackoverflow.com/questions/1889966/what-approaches-are-available-to-dummy-design-time-data-in-wpf

반응형