2

Silverlight XAML では、ネストされたコンテナーの DataContext 宣言が、親コンテナーの DataContext に対して相対的であることに気付きました。皆様、ご確認いただけますでしょうか。

もしそうなら、これを聞いてみましょう: 子 XAML コンテナー要素 (つまり、StackPanel) で、その相対的な DataContext ツリーから飛び出して、より高い場所から開始する方法、または設定したい場合に別の DataContext をすべて一緒に開始する方法を教えてください。 StackPanel の DataContext を別のルート コンテキストに移動しますか?

つまり、子 DataContext を親 DataContext から解放する方法は?

(XAML コード ソリューション/構文を探しています)

4

2 に答える 2

3

あなたの最初の仮定は正しいです。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>

上記の例の「モデル」クラスは次のとおりです。


    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; }
    }

于 2009-03-04T18:26:05.710 に答える
1

このブログをチェックしてください。必要なことをすべて xaml から実行するためのプロキシ クラスについて詳しく説明しています。

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

于 2010-07-28T01:29:49.370 に答える