2011-12-14 5 views
2

私はDataGridを持っています。このDataGridのItemsSourceは、WCF呼び出しのCompletedイベントで設定されます。ただし、マスターグリッドDataTemplate内にDetail Datagridを追加して適切に名前を付けると、マスターグリッド選択変更イベントを埋め込むためにIneedが認識されません詳細グリッド。 grdMaster.Soと同じように、grdDetailのItemsSourceを設定することはできません。詳細データグリッドをどのように埋めることができますか?Silverlightマスター/ディテールの状況

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

答えて

0

あなたはNOTdefineはあなたの詳細データグリッドのバインドなかった、あなたはfalseに自動生成列を設定します。 XAMLまたはコードビハインドでバインディングを定義してから、client_CustomerDetailCompletedイベントが発生する必要があります。詳細データグリッドには列が含まれていないため、項目のソースだけを設定するだけでは機能しません。これはMVVM patternが便利な場所です。