Кто-нибудь знает исчерпывающую коллекцию примеров привязки данных WPF? - PullRequest
5 голосов
/ 27 апреля 2009

Кажется, что каждый раз, когда я читаю статью о том, «как сделать привязку данных WPF», это делается с разными вариациями, иногда с DataContext, иногда без, иногда с Itemssource или с Itemssource и DataContext, есть также ObjectDataProvider, и вы можете иметь любой из них в XAML или codebehind, или без codebehind и привязывать напрямую из XAML к вашим ViewModels.

Кажется, что в самом XAML можно использовать десятки различных синтаксисов, например ::100100

<ListBox ItemsSource="{Binding Source={StaticResource Customers}}">

и

<ListBox DataContext="{StaticResource Customers}" ItemsSource="{Binding}">

Эти два примера кода, например, делают одно и то же:

1. Использование ObjectDataProvider без кода:

<Window x:Class="TestDataTemplate124.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:TestDataTemplate124"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <ObjectDataProvider x:Key="Customers"
                            ObjectType="{x:Type local:Customer}"
                            MethodName="GetAllCustomers"/>
    </Window.Resources>
    <StackPanel>
        <ListBox DataContext="{StaticResource Customers}" ItemsSource="{Binding}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding FirstName}"/>
                        <TextBlock Text=" "/>
                        <TextBlock Text="{Binding LastName}"/>
                        <TextBlock Text=" ("/>
                        <TextBlock Text="{Binding Age}"/>
                        <TextBlock Text=")"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </StackPanel>
</Window>

2. Пример без DataContext:

<Window x:Class="TestDataTemplate123.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:TestDataTemplate123"
    Title="Window1" Height="300" Width="300">
    <StackPanel>
        <ListBox x:Name="ListBox1">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding FirstName}"/>
                        <TextBlock Text=" "/>
                        <TextBlock Text="{Binding LastName}"/>
                        <TextBlock Text=" ("/>
                        <TextBlock Text="{Binding Age}"/>
                        <TextBlock Text=")"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </StackPanel>
</Window>

    using System.Collections.ObjectModel;
    using System.Windows;

    namespace TestDataTemplate123
    {
        public partial class Window1 : Window
        {
            public Window1()
            {
                InitializeComponent();
                ListBox1.ItemsSource = Customer.GetAllCustomers();
            }
        }
    }

Кто-нибудь знает об источнике, который объясняет привязку данных WPF, вместо того, чтобы просто сказать «вот как вы делаете привязку данных», а затем объяснить один конкретный способ, а вместо этого попытаться объяснить различные способы выполнения привязки данных и показать, возможно, какие преимущества и недостатки например с DataContext или нет, с привязкой в ​​XAML или с выделенным кодом и т. д .?

Ответы [ 2 ]

3 голосов
/ 27 апреля 2009

Проверить этот шпаргалка

1 голос
/ 27 апреля 2009

Я могу порекомендовать вам блог от Bea Stollnitz . Если я не ошибаюсь, она работает в Microsoft и участвует в разработке WPF, особенно в области привязки данных. У нее действительно есть отличные учебники по WPF, многие из которых посвящены привязке данных. Вы должны найти действительно хорошую информацию здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...