2016-03-15 135 views
0

我有一個數據網格。當單擊行時,會顯示rowdetails。在rowdetails中,datagrid旁邊的另一個datagrid是DatePicker。綁定到datepicker在datagrid rowdetails

所以主DataGrid有一個自定義對象的集合。當單擊一行時,子數據網格將綁定到selecteditem.Funds(另一個列表)(如下所示的代碼)。 selectedItem也有一個datetime屬性,我想綁定到我的DatePicker,但我無法讓它工作。

我使用下面的一行,

<DatePicker SelectedDate="{Binding SelectedItem.DateEffective2, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 

我認爲(也許是錯誤的,因爲日期選擇在rowdetails我將能夠綁定到selectedItem屬性,你猜我錯了?

<DataGrid Grid.Row="1" 
          ItemsSource="{Binding HldLogEQCurr, UpdateSourceTrigger=PropertyChanged}" 
          SelectedItem="{Binding SelectedHldLogEq, UpdateSourceTrigger=PropertyChanged}" 
          Style="{StaticResource DataGridTemplate1}" 
          ColumnHeaderStyle="{StaticResource DG_ColumnHeaderCenter1}"            
          RowStyle="{StaticResource DG_Row1}" 
          CellStyle="{StaticResource DG_Cell1}"          
          RowHeaderStyle="{StaticResource DG_RowHeader1}"        
          AutoGenerateColumns="False" 
          HorizontalAlignment="Stretch"       
          Background="Silver" 
          Margin="50,50,50,50"        
          CanUserDeleteRows="False" 
          CanUserAddRows="False" 
          RowHeaderWidth="30"> 

         <DataGrid.RowDetailsTemplate> 
          <DataTemplate> 
           <Grid x:Name="RowDetailGrid"    
             Margin="5" 
             HorizontalAlignment="Left"> 
             <Border HorizontalAlignment="Left" 
              VerticalAlignment="Top" 
              Height="250" 
              CornerRadius="5"> 
             <Border.Background> 
              <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> 
               <GradientStop Offset="0" Color="Transparent"/> 
               <GradientStop Offset="1" Color="Transparent"/> 
              </LinearGradientBrush> 
             </Border.Background> 
             <Grid> 
              <Grid.RowDefinitions> 
               <RowDefinition Height="*"/> 
               <RowDefinition Height="4*"/> 
              </Grid.RowDefinitions> 
              <Grid.ColumnDefinitions> 
               <ColumnDefinition Width="400"/> 
               <ColumnDefinition Width="300"/> 
               <ColumnDefinition Width="*"/> 
              </Grid.ColumnDefinitions> 
              <TextBlock Grid.Row="0" 
               Grid.Column="0" 
               Margin="5,5,5,5" 
               HorizontalAlignment="Left" 
               FontSize="12" 
               FontWeight="Bold" 
               Foreground="Black" 
               Text="Select action to take"> 
              </TextBlock> 
              <DataGrid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" 
                ItemsSource="{Binding SelectedItem.Funds, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"                 
                RowStyle="{StaticResource DG_Row}" 
                ColumnHeaderStyle="{StaticResource DG_ColumnHeader}" 
                RowHeaderStyle="{StaticResource DG_RowHeaderNested}" 
                CellStyle="{StaticResource DG_Cell}" 
                Background="Silver" 
                HorizontalGridLinesBrush="LightGray" 
                VerticalGridLinesBrush="LightGray" 
                CanUserAddRows="False" 
                CanUserDeleteRows="False" 
                Margin="50,5,5,20" 
                AutoGenerateColumns="False"> 
               <DataGrid.Columns> 
                <DataGridTextColumn Header="Fund Code" Binding="{Binding Code}" IsReadOnly="True" MinWidth="75"/> 
                <DataGridTextColumn Header="Fund Code SS" Binding="{Binding CodeSS}" IsReadOnly="True" MinWidth="75"/> 
                <DataGridTextColumn Header="Number of Rights" Binding="{Binding CurrentNominal, StringFormat={}{0:N0}}" IsReadOnly="True"/> 
                <DataGridTextColumn Header="Rights To Exercise" Binding="{Binding NewNominal, StringFormat={}{0:N0}}" IsReadOnly="True"/> 
                <DataGridCheckBoxColumn Header="Take Cash" Binding="{Binding OptionOne, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="False"/> 
                <DataGridCheckBoxColumn Header="Take Stock" Binding="{Binding OptionTwo, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="False"/> 
                <DataGridCheckBoxColumn Header="Take Both" Binding="{Binding OptionThree, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="False"/> 
               </DataGrid.Columns> 
              </DataGrid> 

              <Grid Grid.Column="2" Grid.Row="0" Grid.RowSpan="2"> 
               <Grid.ColumnDefinitions> 
                <ColumnDefinition Width="180"/> 
                <ColumnDefinition/> 
                <ColumnDefinition/> 
                <ColumnDefinition/> 
               </Grid.ColumnDefinitions> 
               <Grid.RowDefinitions> 
                <RowDefinition Height="*"/> 
                <RowDefinition Height="4*"/> 
               </Grid.RowDefinitions> 

               <StackPanel Grid.Row="1" Grid.Column="2" Margin="20,0,0,0"> 
                <TextBlock Margin="0,5,5,5" HorizontalAlignment="Left" FontSize="12" FontWeight="Bold" Foreground="Black" 
                   Text="Select Date Effective From"/> 
                <DatePicker HorizontalAlignment="Left" VerticalAlignment="Center" Margin="0,10,0,0" 
                   BorderThickness="0" SelectedDate="{Binding SelectedItem.DateEffective, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="200"/> 
               </StackPanel> 


              </Grid> 

             </Grid> 
            </Border> 
           </Grid> 
          </DataTemplate> 
         </DataGrid.RowDetailsTemplate> 

         <DataGrid.Columns> 
          <DataGridTextColumn Header="Date Entered" IsReadOnly="True" Binding="{Binding DateEntered, StringFormat={}\{0:dd-MMM-yy\}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" MinWidth="75"/> 
          <DataGridTextColumn Header="Date Effective" IsReadOnly="True" Binding="{Binding DateEffective, StringFormat={}\{0:dd-MMM-yy\}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" MinWidth="75"/> 
          <DataGridTextColumn Header="Sedol" IsReadOnly="True" Binding="{Binding Security.Sedol}" MinWidth="75"/> 
          <DataGridTextColumn Header="Name" IsReadOnly="True" Binding="{Binding Security.Name}" MinWidth="200"/> 
          <DataGridTextColumn Header="Ratio" IsReadOnly="True" Binding="{Binding RatioNew}" MinWidth="75"/> 

         </DataGrid.Columns> 
        </DataGrid> 
+1

在DataContext爲的DatePicker應該已經是的SelectedItem,嘗試將其更改爲:

+0

謝謝,現在的作品!如果你把你的評論作爲回答高興地標記爲正確 – mHelpMe

回答

1

在DataContext爲的DatePicker應該已經是的SelectedItem,嘗試將其更改爲:

<DatePicker SelectedDate="{Binding DateEffective2, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
ItemsSource="{Binding SelectedItem.Funds, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" 

爲:另外,你的子DataGrid的ItemsSource時,可以從簡化

ItemsSource="{Binding Funds}"