Мастер Silverlight / Ситуация с деталями - PullRequest
2 голосов
/ 14 декабря 2011

У меня есть DataGrid.ItemsSource этого DataGrid задается в событии Completed вызова WCF. Однако, при добавлении Detail Datagrid в главные сетки DataTemplate и присвоении ему соответствующего имени ... Требуется заполнить его событием изменения выбора основных сеток, но мой код не распознаетсетка деталей.Я не могу установить ItemsSource для grdDetail так, как я это делаю с grdMaster.Так как я могу заполнить свою сетку данных?

Файл 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>

И CodeBehind

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

1 Ответ

0 голосов
/ 06 января 2012

Вы НЕ определили привязку для вашей сетки подробных данных и установили для столбцов автогенерации значение false.Вам нужно определить привязку либо в XAML, либо в коде до того, как сработает событие client_CustomerDetailCompleted.Простая установка источника элемента не будет работать, поскольку сетка подробных данных не содержит столбцов.Вот где шаблон MVVM пригодится.

...