Silverlight - относительный DataContext в XAML? - PullRequest
2 голосов
/ 04 марта 2009

В Silverlight XAML, я только что понял, что объявление DataContext во вложенном контейнере связано с DataContext родительского контейнера. Можете ли вы все, пожалуйста, подтвердите.

Если это так, то позвольте мне спросить: На дочернем элементе контейнера XAML (например, StackPanel) как бы вы выпрыгнули из этого относительного дерева DataContext и начали бы с более высокого места, или начали бы другой DataContext вместе, если Вы хотели установить DataContext на StackPanel в другой корневой контекст?

Другими словами, как освободить дочерний DataContext от родительского DataContext?

(В поисках решения / синтаксиса кода XAML)

Ответы [ 2 ]

3 голосов
/ 04 марта 2009

Ваше первое предположение верно. DataContext отчасти наследуется вложенные элементы.

В дочернем элементе контейнера XAML вы всегда можете переопределить, что такое DataContext.

См. Пример ниже:


    <UserControl.Resources>
        <local:Customer x:Key="Cust">
        <local:Supplier x:Key="Supp">
    </UserControl.Resources>
    <Grid x:Name="LayoutRoot" Background="White" DataContext="{StaticResource Cust}">
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <StackPanel Orientation="Horizontal" Grid.Row="0">
            <TextBlock Text="Customer Name: " />
            <TextBox Text="{Binding Path=Name}"/>
        </StackPanel>
        <StackPanel Orientation="Horizontal" Grid.Row="1" DataContext="{StaticResource Supp}">
            <TextBlock Text="Supplier Name: " />
            <TextBox Text="{Binding Path=Name}"/>
            <TextBlock Text=" Telephone: " />
            <TextBox Text="{Binding Path=Telephone}"/>
        </StackPanel>
    </Grid>

А вот классы "Model" для приведенного выше примера:


    public class Customer
    {
        public Customer()
        {
            Name = "Customer name";
            Address = "Customer address";
        }
        public string Name { get; set; }
        public string Address { get; set; }
    }

    public class Supplier
    {
        public Supplier()
        {
            Name = "Supplier name";
            Address = "Supplier address";
            Telephone = "(555)555-5555";
        }

        public string Name { get; set; }
        public string Address { get; set; }
        public string Telephone { get; set; }
    }

1 голос
/ 28 июля 2010

Ознакомьтесь с этим блогом, в котором подробно описан прокси-класс для выполнения всех необходимых задач из xaml.

[http://weblogs.asp.net/dwahlin/archive/2009/08/20/creating-a-silverlight-datacontext-proxy-to-simplify-data-binding-in-nested-controls.aspx][1]

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