我有一个位于用户控件内的Datagrid,它位于另一个用户控件内。该视图只有一个视图模型,并且对于任何用户控件都没有单独的ViewModel。 ViewModel使用以下棱镜连接:ViewModelLocator.AutoWireViewModel="True"
我面临的问题是我想将VM属性绑定到具有按钮的数据网格列。我想基于ViewModel属性设置按钮的IsEnabled属性。
这是我在Button样式中使用的东西。 DataTrigger我已经写了这个:
Binding="{Binding RelativeSource={RelativeSource FindAncestor,AncestorLevel=3, AncestorType={x:Type Grid}}, Path=IsEncounterLocked}" Value="True"
这是我在Button样式中使用的东西。 DataTrigger我已经写了这个:
Binding="{Binding RelativeSource={RelativeSource FindAncestor,AncestorLevel=3, AncestorType={x:Type Grid}}, Path=IsEncounterLocked}" Value="True"
整个元素:
<DataTemplate x:Key="HoverDeleteColumnTemplate">
<Button AutomationProperties.Name="HistorySummary.DiagnosticHistoryDeleteButton"
Content="{StaticResource actionIconDelete}"
Click="DeleteButton_Click"
Command="{Binding ElementName=DiagnosticHistoryUserControl, Path=DiagnosticHistoryDeleteCommand}"
CommandParameter="{Binding ElementName=DiagnosticHistoryUserControl, Path=DiagnosticHistoryDeleteCommandParameter}">
<Button.Style>
<Style BasedOn="{StaticResource HiddenActionButtonIcon}" TargetType="Button">
<Setter Property="Button.Visibility" Value="Hidden"/>
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}, Path=IsMouseOver}" Value="True">
<Setter Property="Button.Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</DataTemplate>
<Style x:Key="HoverColumnStyle">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}, Path=IsMouseOver}" Value="True">
<Setter Property="DataGridRow.Background" Value="{StaticResource Glacier}"/>
</DataTrigger>
</Style.Triggers>
</Style>
<DataTemplate x:Key="HoverAddHpiColumnTemplate">
<Button Content="Add to HPI"
Width="86"
Command="{Binding ElementName=DiagnosticHistoryUserControl, Path=DiagnosticHistoryAddToHpiCommand}"
CommandParameter="{Binding ElementName=DiagnosticHistoryUserControl, Path=DiagnosticHistoryAddToHpiCommandParameter}">
<Button.Style>
<Style BasedOn="{StaticResource HiddenActionButton}" TargetType="Button">
<Setter Property="Button.Visibility" Value="Hidden"/>
<Setter Property="IsEnabled" Value="True"/>
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}, Path=IsMouseOver}" Value="True">
<Setter Property="Button.Visibility" Value="Visible"/>
</DataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource FindAncestor,AncestorLevel=3, AncestorType={x:Type Grid}}, Path=IsEncounterLocked}" Value="True"/>
<Condition Binding="{Binding Path=Obsvalue}" Value="{x:Null}"/>
<Condition Binding="{Binding Path=Obsinterpretation}" Value="{x:Null}"/>
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="False"/>
<Setter Property="ToolTip" Value="Add to HPI button is only enabled if the selected study has either an Interpretation or Result documented."/>
<Setter Property="ToolTipService.ShowOnDisabled" Value="True"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</DataTemplate>
</ResourceDictionary>
</UserControl.Resources>
<Grid Background="White">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0"
Margin="0,0,0,16"
Orientation="Horizontal">
<Button x:Name="AddDiagnosticHistoryButton"
AutomationProperties.Name="HistorySummary.AddDiagnosticHistoryButton"
Style="{StaticResource StandardActionButtonPrimary}"
Width="Auto"
Margin="0,0,5,0"
HorizontalAlignment="Left"
Content="Add Diagnostic"
Command="{Binding ElementName=DiagnosticHistoryUserControl, Path=DiagnosticHistoryAddCommand}"
CommandParameter="{Binding ElementName=DiagnosticHistoryUserControl, Path=DiagnosticHistoryAddCommandParameter}"/>
<Button x:Name="ViewAllOrdersButton"
AutomationProperties.Name="HistorySummary.ViewAllOrdersButton"
Style="{StaticResource StandardActionButtonSecondary}"
Width="Auto"
Margin="5,0"
HorizontalAlignment="Left"
Content="View All Orders"
Command="{Binding ElementName=DiagnosticHistoryUserControl, Path=DiagnosticHistoryViewAllOrdersCommand}"
CommandParameter="{Binding ElementName=DiagnosticHistoryUserControl, Path=DiagnosticHistoryViewAllOrdersCommandParameter}"/>
</StackPanel>
<Grid Grid.Row="1"
Height="Auto"
Margin="0,8,0,16">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid HorizontalAlignment="Left">
<Border BorderThickness="1"
BorderBrush="#92AEC4"
Background="White"
CornerRadius="3"
Height="20">
<Border.Effect>
<DropShadowEffect BlurRadius="2" Color="Black" ShadowDepth="2" Opacity="0.16"/>
</Border.Effect>
</Border>
<Border BorderThickness="1"
BorderBrush="#92AEC4"
CornerRadius="3"
Background="White"
Height="20">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition />
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<RadioButton GroupName="DiagnosticSummaryToggle"
Name="DiagnosticDisplayAll"
AutomationProperties.Name="HistorySummary.DiagnosticDisplayAllButton"
IsChecked="True"
Grid.Column="0"
Padding="16,6"
Style="{StaticResource ButtonSetText}"
Content="Display All"
Command="{Binding ElementName=DiagnosticHistoryUserControl, Path=DiagnosticHistoryDisplayAllCommand}"
CommandParameter="{Binding ElementName=DiagnosticHistoryUserControl, Path=DiagnosticHistoryDisplayAllCommandParameter}"/>
<Line Grid.Column="1"
StrokeThickness="2"
Stroke="#92AEC4"
X1="0"
Y1="0"
X2="0"
Y2="20"/>
<RadioButton Style="{StaticResource ButtonSetText}"
GroupName="DiagnosticSummaryToggle"
Name="DiagnosticSpecialtyOnly"
AutomationProperties.Name="HistorySummary.DiagnosticSpecialtyOnly"
Grid.Column="2"
Padding="16,6"
IsChecked="{Binding ElementName=DiagnosticHistoryUserControl, Path=DiagnosticHistoryDermatologyOnly, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True}"
Content="Dermatology Only" />
</Grid>
</Border>
</Grid>
<TextBlock Grid.Column="2"
Margin="0,0,6,0"
Style="{StaticResource BodyCopy3}"
Text="Resulted/Completed Orders"/>
</Grid>
<StackPanel Grid.Row="2">
<DataGrid Name="DiagnosticHistoryGrid"
AutomationProperties.Name="HistorySummary.DiagnosticHistoryGrid"
Grid.Row="2"
ItemsSource="{Binding ElementName=DiagnosticHistoryUserControl, Path=DiagnosticHistoryItemSource}"
SelectedItem="{Binding ElementName=DiagnosticHistoryUserControl, Path=DiagnosticHistorySelectedItem}"
SelectionChanged="DiagnosticHistory_SelectionChanged"
Width="{Binding RelativeSource={RelativeSource AncestorType=StackPanel}, Path=ActualWidth}"
ColumnWidth="*">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Acttextdisplay}"
Header="Order"
SortDirection="Ascending">
<DataGridTextColumn.ElementStyle>
<Style>
<Setter Property="TextBlock.TextWrapping" Value="Wrap"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding Path=Completeddate, Converter={StaticResource DateFormatConverter}}"
Header="Completed"
Width="Auto"/>
<DataGridTemplateColumn Header="Interpretation">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock>
<TextBlock Name="InterpretationText"
Text="{Binding Path=Obsinterpretation, Converter={StaticResource KbmCapitalizeFirstLetterConverter}}"
TextWrapping="Wrap"/>
<ui:WarningSmall x:Name="WarningImage"
Visibility="Collapsed"/>
</TextBlock>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=Obsinterpretation}" Value="abnormal">
<Setter TargetName="InterpretationText" Property="FontWeight" Value="Bold"/>
<Setter TargetName="WarningImage" Property="Visibility" Value="Visible"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Result"
Binding="{Binding Path=Obsvalue}">
<DataGridTextColumn.ElementStyle>
<Style>
<Setter Property="TextBlock.TextWrapping" Value="Wrap"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTemplateColumn Header="{x:Null}"
Width="102"
CellTemplate="{StaticResource HoverAddHpiColumnTemplate}"
CellStyle="{StaticResource HoverColumnStyle}"/>
<DataGridTemplateColumn Header="{x:Null}"
Width="40"
CellTemplate="{StaticResource HoverDeleteColumnTemplate}"
CellStyle="{StaticResource HoverColumnStyle}"/>
</DataGrid.Columns>
</DataGrid>
<StackPanel.Style>
<Style TargetType="StackPanel">
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=DiagnosticHistoryGrid, Path=Items.Count}" Value="0">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ElementName=DiagnosticHistoryGrid, Path=Items.Count}" Value="1"/>
<Condition Binding="{Binding Path=Mng_Diag_Study_Ord_History_.IsDeleted}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="Visibility" Value="Collapsed"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
</StackPanel>
<Popup Style="{StaticResource GrowlDeletePopup}"
PlacementTarget="{Binding ElementName=DiagnosticHistoryUserControl}">
<ui:Growl x:Name="GrowlUserControl"
Style="{StaticResource GrowlDeleteHistories}"
UndoCommand="{Binding ElementName=DiagnosticHistoryUserControl, Path=UndoCommand, Mode=TwoWay}"
UndoCommandParameter="{Binding ElementName=DiagnosticHistoryUserControl, Path=UndoCommandParameter, Mode=TwoWay}"/>
</Popup>
<TextBlock AutomationProperties.Name="HistorySummary.NoDiagnosticHistoryRecordsFound"
Height="18"
Grid.Row="2"
VerticalAlignment="Center"
Text="No Diagnostic History records found.">
<TextBlock.Style>
<Style BasedOn="{StaticResource BodyCopy3}" TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=DiagnosticHistoryGrid, Path=Items.Count}" Value="0">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ElementName=DiagnosticHistoryGrid, Path=Items.Count}" Value="1"/>
<Condition Binding="{Binding Path=Mng_Diag_Study_Ord_History_.IsDeleted}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="Visibility" Value="Visible"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<Rectangle Style="{StaticResource SeparatorLine}"
Grid.Row="3"
Margin="0,16"/>
<history:HistoryReview Grid.Row="4"
DocumentDetail="{Binding Histories_.Docgen, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"
UnobtainedReason="{Binding Histories_.Hx_Unobtain_Reason, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"
Title="History Review for Diagnostic History"/>
</Grid>
</UserControl>
答案 0 :(得分:1)
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=DataGrid},Path=DataContext.IsEncounterLocked}" Value="True">
<Setter Property="Button.IsEnabled" Value="False"/>
</DataTrigger>
绑定应为相对源,无需设置祖先