2009-04-10 3 views
0

wpf에서 상속 된 객체를 표시하는 가장 좋은 방법은 무엇입니까?

public class Result 
{ 
    public bool Success { get; set; } 
    public string Description { get; set; } 
} 

그러면 다음과 같은 다른 레벨을 추가하고 싶습니다.

public class AssertionFailedResult : Result 
{ 
    public string Expected { get; set; } 
    public string Actual { get; set; } 
} 

WPF에서 간단한 결과를 한 가지 방법으로 표시하고 어설 션이 다른 결과를 표시하지 못했습니다. 방법? 나는 기본적으로 타입에 기반한 템플릿을 만들고 싶습니다.

답변

2

리소스 사전에 DataTemplate을 만들고 DataType 속성을 설정하지만 x : Key 속성을 설정하지 않으면 프레임 워크에서 DataTemplate을 개체의 런타임 형식을 기반으로 개체에 연결합니다. 더 좋든 나쁘 든 상속은 아무런 효과가 없습니다. 즉 에 데이터 형식이 "AssertionFailedResult"인 템플릿이 없더라도 이 아닌 데이터 형식이 "결과"인 템플릿에 "AssertionFailedResult"형식의 개체를 바인딩합니다.

편집 : 죄송합니다. 뒤로 가져 왔습니다. DataTemplates do에는 "다형성"동작이 있습니다. 스타일은 그렇지 않습니다. 어떤 경우 든 프레임 워크는보다 구체적인 데이터 유형을 사용하여 DataTemplate에 바인딩해야합니다.

0

나는 다니엘의 대답을 받아 들여 예제를 만들었습니다.

<Window x:Class="SampleWpfApplication.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:SampleWpfApplication="clr-namespace:SampleWpfApplication"> 
    <Window.Resources> 
     <DataTemplate DataType="{x:Type SampleWpfApplication:Result}"> 
      <Label>Simple Result</Label>    
     </DataTemplate> 
     <DataTemplate DataType="{x:Type SampleWpfApplication:AssertionFailedResult}"> 
      <Label>Assertion Failed!</Label> 
     </DataTemplate> 
    </Window.Resources> 
    <ContentControl x:Name="contentControl" Content="{Binding Path=Result}" /> 
</Window> 

다음, 윈도우의 데이터 컨텍스트 인 모델 클래스 : 다음과 같이

public class Model 
{ 
    public Result Result { get; set; } 
} 

그리고 MainWindow를에

, 나는 DataContext를 설정 :

내가 코드를 게시하는 것은 도움이 될 줄 알았는데
DataContext = new Model() 
        { 
         Result = new AssertionFailedResult() 
            { 
             Success = false, 
             Description = "Assertion failed", 
             Expected = "1", 
             Actual = "1" 
            } 
        }; 

DataTemplate에서 wpf는 내 파트에서 추가 방향을 지정하지 않고 컨트롤을 렌더링하는 방법을 알고 있습니다. Daniel, 다시 한번 감사드립니다.

관련 문제