Was ist der Vorteil der Einstellung DataContext im code anstelle von XAML?

Scheint es zwei Möglichkeiten zu definieren DataContext in WPF:

  • entweder in code wie diese:

App.xaml.cs (entnommen aus der WPF-MVVM Toolkit Vorlage):

public partial class App : Application
{
    private void OnStartup(object sender, StartupEventArgs e)
    {
        //Create the ViewModel and expose it using the View's DataContext
        MainView mainView = new MainView();
        MainViewModel mainViewModel = new MainViewModel();
        mainViewModel.LoadCustomers("c:\\testdata2\\Customers.xml");
        mainView.DataContext = mainViewModel;
        mainView.Show();
    }
}
  • oder in XAML wie diese:

Window1.xaml:

<DockPanel>
    <StackPanel
        HorizontalAlignment="Left"
        DockPanel.Dock="Top"
        Orientation="Horizontal">
        <StackPanel.DataContext>
            <local:CustomerViewModel />
        </StackPanel.DataContext>
        <TextBlock Text="{Binding Path=FirstName}" />
        <TextBlock Text=" " />
        <TextBlock Text="{Binding Path=LastName}" />
    </StackPanel>

    <StackPanel
        HorizontalAlignment="Left"
        VerticalAlignment="top"
        DockPanel.Dock="Top"
        Orientation="Horizontal">
        <ListBox ItemsSource="{Binding Source={StaticResource FileNames}}" />
    </StackPanel>

    <StackPanel
        HorizontalAlignment="Left"
        VerticalAlignment="top"
        DockPanel.Dock="Top"
        Orientation="Horizontal">
        <ComboBox
            ItemsSource="{Binding Source={StaticResource Directories}}"
            SelectedIndex="0" />
    </StackPanel>

    <StackPanel
        HorizontalAlignment="Left"
        VerticalAlignment="top"
        DockPanel.Dock="Top"
        Orientation="Horizontal">
        <StackPanel.DataContext>
            <local:SystemInformationViewModel />
        </StackPanel.DataContext>
        <TextBlock Text="{Binding Path=CurrentTime}" />
    </StackPanel>
</DockPanel>

Den Vorteil, dass die Festlegung des DataContext im XAML hat, ist, dass Ihre Daten zeigen, bis in Expression Blend design-Modus und Expression Blend können Sie tun eine ganze Menge innerhalb der GUI Z. B. wählen Sie die Felder aus Ihrer Datenquelle, etc. wie hier gezeigt.

Habe ich gelesen, dass die Bindung ADO.NET Objekte können nicht gebunden werden, in XAML (obwohl ich nicht sehen, warum Sie schreiben, könnte eine minimale wrapper für die Sie sich binden konnte von XAML).

Seltsam, dass die WPF-Team in die WPF-MVVM-Vorlagen definieren Sie die DataContext-in-codedie sehr schnell macht es nicht praktikabel, zu Bearbeiten und Ihre Ansichten in Expression Blend, da Ihre Daten nicht zeigen, bis in der design-Modus ist oft ein wichtiger Teil des Layouts.

Also ich denke, es muss einen Vorteil die Straße hinunter, um die Einstellung der DataContext im code anstelle von XAML, wer weiß, was es ist?

InformationsquelleAutor der Frage Edward Tanguay | 2009-05-14

Schreibe einen Kommentar