programing

WPF DataTemplate에서 DataType 속성을 사용하려면 어떻게 해야 합니까?

topblog 2023. 4. 18. 21:41
반응형

WPF DataTemplate에서 DataType 속성을 사용하려면 어떻게 해야 합니까?

제가 뭔가 잘못하고 있는 것은 분명하지만 DataType 속성을 사용할 때 HierarchicalDataTemplate(또는 DataTemplate만)가 작동하지 않는 것 같습니다.문제를 나타내는 최단 WPF 어플리케이션을 작성했습니다.

XAML:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:System="clr-namespace:System;assembly=mscorlib"
    xmlns:local="clr-namespace:WpfApplication1"
    Title="Window1" Height="300" Width="300" Loaded="Window_Loaded">
    <Window.Resources>
        <HierarchicalDataTemplate DataType="x:Type local:Foo">
            <TextBlock Text="I am a Foo" />
        </HierarchicalDataTemplate>
        <HierarchicalDataTemplate DataType="x:Type System:String">
            <TextBlock Text="I am a String" />
        </HierarchicalDataTemplate>
    </Window.Resources>
    <Grid>
        <TreeView Name="treeView1" ItemsSource="{Binding}" />
    </Grid>
</Window>

코드:

namespace WpfApplication1
{
    public class Foo
    {
        public string Name { get; set; }
    }

    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            var list = new List<object> { "a", 1, "b", 2, new Foo() { Name="Brian"}};
            treeView1.DataContext = list;
        }
    }
}

트리뷰에 다음과 같이 표시될 것으로 예상합니다.

I am a string
1
I am a string
2
I am a foo

하지만 제 어플리케이션에는 실제로 다음과 같은 내용이 표시됩니다.

a
1
b
2
WpfApplication1.Foo

이상한 점은 웹에서 볼 수 있는 거의 모든 예에서 이 작업을 수행하며(약간의 변형만 있음) 다른 누구도 문제 삼지 않는 것 같다는 것입니다.하지만 XAML을 재배치하기 위해 무수히 많은 방법을 시도했지만 아무런 도움이 되지 않는 것 같습니다.다른 한 쌍의 눈이 도움이 되길 바랍니다.

코드는 정상이지만 DataType 속성 값은 중괄호로 묶어야 합니다.

<HierarchicalDataTemplate DataType="{x:Type local:Foo}">
    <TextBlock Text="I am a Foo" />
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type System:String}">
    <TextBlock Text="I am a String" />
</HierarchicalDataTemplate>

또한 아이템을 사용하지 않는 경우HierarchicalDataTemplate 소스 대신 DataTemplate를 사용할 수도 있습니다.

TreeView의 ItemTemplate 속성을 지정하지 않았습니다.이 속성은 리소스에 정의된 DataTemplate를 지정하려는 경우 사용할 DataTemplate를 TreeView에 알려줍니다.

<TreeView Name="treeView1"
          ItemsSource="{Binding}"
          ItemTemplate="{StaticResource MyResourceItemTemplate}" />

그러나 이 경우 실제로 DataTemplateSelector 구현을 사용하여TreeView.ItemTemplateSelector표시할 유형에 따라 다른 템플릿을 선택하는 속성...

언급URL : https://stackoverflow.com/questions/1424554/how-do-i-use-the-datatype-property-on-a-wpf-datatemplate

반응형