【问题标题】:Silverlight Master/Detail's SituationSilverlight Master/Detail 的情况
【发布时间】:2011-12-14 07:50:19
【问题描述】:

我有一个数据网格。此 DataGrid 的 ItemsSource 是在 WCF 调用的 Completed 事件中设置的。但是,当在主网格 DataTemplate 中添加一个详细数据网格并对其进行适当命名时...需要填充它主网格选择更改事件,但我的代码隐藏无法识别细节网格。我无法像使用 grdMaster 那样设置 grdDetail 的 ItemsSource。那么如何填充我的详细数据网格?

Xaml 文件

  <Grid x:Name="LayoutRoot">

    <sdk:DataGrid x:Name="dgCustList" AutoGenerateColumns="False" Background="Transparent" SelectionChanged="dgCustList_SelectionChanged">
        <sdk:DataGrid.RowDetailsTemplate>
            <DataTemplate>
                <StackPanel x:Name="stkPanel">
                    <sdk:DataGrid x:Name="dgCustDetail" RowDetailsVisibilityMode="VisibleWhenSelected" AutoGenerateColumns="False"  Background="Transparent"/>
                </StackPanel>
            </DataTemplate>
        </sdk:DataGrid.RowDetailsTemplate>
    </sdk:DataGrid>
    <Grid.Projection>
        <PlaneProjection x:Name="Projection"/>
    </Grid.Projection>
</Grid>

还有代码隐藏

  public MusteriListe()
    {
        InitializeComponent();
        var stb1 = new Storyboard { Duration = new Duration(TimeSpan.FromSeconds(1)), SpeedRatio = 3 };

        var daY1 = new DoubleAnimation { From = 0.00, To = 90.00 };
        Storyboard.SetTargetName(daY1, "Projection");
        Storyboard.SetTargetProperty(daY1, new PropertyPath("RotationX"));
        stb1.Children.Add(daY1);
        this.Resources.Add("EndOfPage", stb1);

        var stb = new Storyboard();
        stb.Duration = new Duration(TimeSpan.FromSeconds(1));
        stb.SpeedRatio = 3;

        var daY = new DoubleAnimation { From = -90.00, To = 0.00 };
        Storyboard.SetTargetName(daY, "Projection");
        Storyboard.SetTargetProperty(daY, new PropertyPath("RotationX"));
        stb.Children.Add(daY);
        Resources.Add("StartOfPage", stb);

        dgCustList.Columns.Add(new DataGridTextColumn
        {
            Header = "ID",
            Binding = new Binding("CustomerID")
        });
        dgCustList.Columns.Add(new DataGridTextColumn
        {
            Header = "Müşteri Ad",
            Binding = new Binding("CustomerName")
        });
        dgCustList.Columns.Add(new DataGridTextColumn
        {
            Header = "Müşteri Soyad",
            Binding = new Binding("CustomerSurname")
        });
        dgCustList.Columns.Add(new DataGridTextColumn
        {
            Header = "Müşteri Tel",
            Binding = new Binding("CustomerPhone")
        });
        LoadGrid();
    }
    private void LoadGrid()
    {
        var client = new EczServiceClient();
        client.CustomerInfoCompleted += client_CustomerInfoCompleted;
        client.CustomerInfoAsync();
    }
    void client_CustomerInfoCompleted(object sender, CustomerInfoCompletedEventArgs e)
    {
        dgCustList.ItemsSource = e.Result;
    }

    private void dgCustList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {

        var customer = dgCustList.SelectedItem as CustomerInfo;
        if (customer == null) return;
        var client = new EczServiceClient();
        client.CustomerDetailCompleted += client_CustomerDetailCompleted;
        client.CustomerDetailAsync(customer.CustomerID);

    }
    void client_CustomerDetailCompleted(object sender, CustomerDetailCompletedEventArgs e)
    {
        IN HERE I WANT TO FILL DATAGRID LIKE MASTER GRID BUT ITS NOT LET ME ( dgCustDetail.ItemSource = e.Result)
    }

【问题讨论】:

    标签: c# silverlight datagrid


    【解决方案1】:

    您没有为详细数据网格定义绑定,并且将自动生成列设置为 false。在触发 client_CustomerDetailCompleted 事件之前,您需要在 XAML 或代码中定义绑定。仅单独设置项目源是行不通的,因为详细数据网格不包含列。这就是MVVM pattern 派上用场的地方。

    【讨论】:

      猜你喜欢
      • 2021-11-11
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      相关资源
      最近更新 更多