0
我有类似下面的xaml。我无法将chkExtract复选框绑定到ChkHeaderExtract。我想为ChkHeaderExtract做一些事情,比如IsChecked =“{Binding ElementName = chkExtract”等等。但我无法访问chkExtract名称。此外,我无法从cs文件的任何位置访问chkExtract控件。任何人都可以帮助我如何做绑定。绑定到DataGrid中的DataTemplate中的元素
<DataGrid x:Name="DgEntities" FrozenColumnCount="13" IsReadOnly="True" MaxWidth="854" Height="444" CanUserAddRows="false" SelectedItem="{Binding GetSelectedRow,Mode=TwoWay,NotifyOnTargetUpdated=True}" ItemsSource="{Binding JobEntitiesCollectionViewSource.View, Mode=OneWay, NotifyOnTargetUpdated=True}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" Header="Entity" Width="202" MaxWidth="202" MinWidth="202"/>
<DataGridTemplateColumn Header="Status" Width="138" MaxWidth="138" MinWidth="138">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Margin="5" Content="{Binding ExtractStatus, Mode=TwoWay, NotifyOnTargetUpdated=True}" Command="{Binding DataContext.HyperlinkCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}" CommandParameter="{Binding SelectedItem, ElementName=DgEntities}" Cursor="Hand" MouseDoubleClick="Control_OnMouseDoubleClick" >
<Button.Template>
<ControlTemplate TargetType="{x:Type Button}">
<TextBlock Style="{StaticResource TxtblkStyleExtract}" TextDecorations="None"><InlineUIContainer>
<ContentPresenter />
</InlineUIContainer></TextBlock>
</ControlTemplate>
</Button.Template>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="40" MaxWidth="40" MinWidth="40">
<DataGridTemplateColumn.Header>
<CheckBox x:Name="ChkHeaderExtract" Width="26" Command="{Binding DataContext.HeaderExtractCommand,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type DataGrid}},Mode=OneWay}" CommandParameter="{Binding IsChecked,RelativeSource={RelativeSource Self}}" IsChecked="{Binding DataContext.ExtractHeaderCheck,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type DataGrid}},Mode=TwoWay}" />
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox x:Name="chkExtract" HorizontalAlignment="Center" VerticalAlignment="Center" Command="{Binding DataContext.IndividualExtractCommand,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type DataGrid}},Mode=OneWay}" CommandParameter="{Binding IsChecked,RelativeSource={RelativeSource Self}}" IsChecked="{Binding ExtractIsSelected, Mode=TwoWay, NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
我通过视图模型做到了这一点,它一切正常。但在将来,如果遇到类似的情况,那么更改xaml或修改视图模型的最佳方法是什么?谢谢。 – nikhil
当它是一个非常简单的绑定(即Textbox的可见性被绑定到Label的可见性)时,我更愿意直接在xaml中绑定项目,但每当它变得复杂时,我都会发现ViewModel更好,因为它可以更好地控制。至于复选框和类似的东西,我通常会把'IsChecked'绑定到ViewModel上的一个属性,因为这往往是你想要用于业务逻辑的信息。 – slimbofat