2016-03-15 95 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}"