datagrid命令属性中的按钮

时间:2014-11-10 21:41:09

标签: wpf mvvm datagrid

我有DataGrid以下XAML。首先,网格内的Button没有得到蓝色样式,其次按下按钮时,Command属性不起作用,但OnClick正在运行。在视图模型中,我有RelayCommand实现,与其他控件一起使用只有DataGrid中的按钮似乎有问题。

 <DataGrid 
   x:Name="dgEntities" 
   Width="650" 
   Height="239" 
   Margin="40,-48,65,-8" 
   ItemsSource="{Binding JobEntities}" 
   AutoGenerateColumns="False">
   <DataGrid.Columns>
      <DataGridTemplateColumn Header="Status">
         <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
               <Button 
                  Margin="5" 
                  Content="{Binding TaskDetails[0].Status,Mode=TwoWay,NotifyOnTargetUpdated=True}"
                  Command="{Binding HypelinkCommand}" 
                  CommandParameter="{Binding ElementName=dgEntities,Path=SelectedItem}"
                  Cursor="Hand" 
                  Click="Button_Click">
                  <Button.Template>
                     <ControlTemplate TargetType="Button">
                        <TextBlock TextDecorations="Underline">
                           <ContentPresenter />
                        </TextBlock>
                     </ControlTemplate>
                  </Button.Template>
                  <Button.Style>
                     <Style TargetType="Button">
                        <Setter Property="Foreground" Value="Blue" />
                     </Style>
                  </Button.Style>
               </Button>
            </DataTemplate>
         </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
      <DataGridTemplateColumn>
         <DataGridTemplateColumn.Header>
            <CheckBox Name="chkHeaderExtract" Checked="ChkHeaderExtract_OnChecked" Unchecked="ChkHeaderExtract_OnUnchecked"/>
         </DataGridTemplateColumn.Header>
         <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
               <CheckBox Name="chkExtract" IsChecked="{Binding TaskDetails[0].IsSelected,Mode=TwoWay,NotifyOnTargetUpdated=True}"/>
            </DataTemplate>
         </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
      <DataGridTemplateColumn Header="Status">
         <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
               <Button 
                  Margin="5" 
                  Content="{Binding TaskDetails[1].Status,Mode=TwoWay,NotifyOnTargetUpdated=True}"
                  Command="{Binding HypelinkCommand}" 
                  CommandParameter="{Binding ElementName=dgEntities,Path=SelectedItem}"
                  Cursor="Hand">
                  <Button.Template>
                     <ControlTemplate TargetType="Button">
                        <TextBlock TextDecorations="Underline">
                           <ContentPresenter />
                        </TextBlock>
                     </ControlTemplate>
                  </Button.Template>
                  <Button.Style>
                     <Style TargetType="Button">
                        <Setter Property="Foreground" Value="Blue" />
                     </Style>
                  </Button.Style>
               </Button>
            </DataTemplate>
         </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
      <DataGridTemplateColumn>
         <DataGridTemplateColumn.Header>
            <CheckBox Name="chkHeaderTransform" Checked="ChkHeaderTransform_OnChecked" Unchecked="ChkHeaderTransform_OnUnchecked"/>
         </DataGridTemplateColumn.Header>
         <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
               <CheckBox Name="chkTransform" IsChecked="{Binding TaskDetails[1].IsSelected,Mode=TwoWay,NotifyOnTargetUpdated=True}"/>
            </DataTemplate>
         </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
      <DataGridTemplateColumn Header="Status">
         <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
               <Button 
                  Margin="5" 
                  Content="{Binding TaskDetails[2].Status,Mode=TwoWay,NotifyOnTargetUpdated=True}"
                  Command="{Binding HypelinkCommand}" 
                  CommandParameter="{Binding ElementName=dgEntities,Path=SelectedItem}"
                  Cursor="Hand" 
                  Foreground="Blue">
                  <Button.Template>
                     <ControlTemplate TargetType="Button">
                        <TextBlock TextDecorations="Underline">
                           <ContentPresenter />
                        </TextBlock>
                     </ControlTemplate>
                  </Button.Template>
               </Button>
            </DataTemplate>
         </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
      <DataGridTemplateColumn>
         <DataGridTemplateColumn.Header>
            <CheckBox Name="chkHeaderLoad" Checked="ChkHeaderLoad_OnChecked" Unchecked="ChkHeaderLoad_OnUnchecked"/>
         </DataGridTemplateColumn.Header>
         <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
               <CheckBox Name="chkLoad" IsChecked="{Binding TaskDetails[2].IsSelected,Mode=TwoWay,NotifyOnTargetUpdated=True}"/>
            </DataTemplate>
         </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
      <DataGridTextColumn Binding="{Binding EntityName}"  Header="Entity" Width="150"/>
   </DataGrid.Columns>
</DataGrid>

代码发布为评论而不是更新到原始帖子。

private RelayCommand<object> _hyperlinkInstance; 
public ICommand HypelinkCommand 
{ 
    get 
    { 
        if(_hyperlinkInstance==null) 
               _hyperlinkInstance = new RelayCommand<object>(openDialog); 
        return _hyperlinkInstance; 
    } 
} 

private void openDialog(object obj) 
{ 
    JobConfigurationResults results = obj as JobConfigurationResults; 
    jeresult = JobEntities.SingleOrDefault(
                           x => x.JobEntityId == results.JobEntityId); 
}

0 个答案:

没有答案