WPF:在DataTemplate中使用DataType


DataTemplate中的DataType的功能實際上和Style中的TargetType很類似。

在Style中,使用了TargetType之后,如果不定義Style的Key,那么這個Style將會影響到它所在區域的所有TargetType控件的樣式。

同理,在DataTemplate中,使用了DataType之后,如果不定義DataTemplate的Key,那么這個DataTemplate將應用於它所在區域,所有的以這個DataType為數據源的控件。

我寫了一個小例子來展示這個效果。

定義Model,Person:

    public class Person
    {
        public string Name
        {
            get;
            set;
        }

        public int Age
        {
            get;
            set;
        }
    }

定義ViewModel:

    public class MainViewModel
    {
        public ObservableCollection<Person> AllPerson
        {
            get;
            set;
        }

        public MainViewModel()
        {
            AllPerson = new ObservableCollection<Person>
            {
                new Person
                {
                    Name = "張三",
                    Age = 18
                },
                new Person
                {
                    Name = "李四",
                    Age = 28
                }
            };
        }
    }

定義DataTemplate,使用了DataType:

    <Window.Resources>
        <DataTemplate DataType="{x:Type local:Person}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Name}" />
                <TextBlock Text="{Binding Age}" />
            </StackPanel>
        </DataTemplate>
    </Window.Resources>

ItemControl的ItemTemplate使用上面定義的DataTemplate:

        <ItemsControl ItemsSource="{Binding AllPerson}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Vertical" />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>

由於ItemControl的Item的數據源為Person,且存在具有Person為DataType的DataTemplate,所以ItemControl的ItemTemplate會自動應用上面定義的DataTemplate。

運行效果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM