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
(여기서 '네임스페이스')MockHomeViewModel
lives)
이 기능은 매우 간단하며(마음에 들어!), 실제 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
'programing' 카테고리의 다른 글
Microsoft SQL Server에서 10진수 열의 정밀도를 변경하려면 어떻게 해야 합니까? (0) | 2023.04.11 |
---|---|
C# 문자열 비교 방식의 차이 (0) | 2023.04.11 |
Xcode: 프로젝트 빌딩의 "file xxx.png is missing from working copy" 문제 (0) | 2023.04.11 |
Angular JS를 사용하여 다른 모듈 구성에 상수 주입 (0) | 2023.04.06 |
MongoDB는 어떻게 SQL 주입 혼란을 피할 수 있습니까? (0) | 2023.04.06 |