簡體   English   中英

在 DataGrid 中綁定 ViewModel 屬性,Datagrid 在 UserControl 內,而在另一個用戶控件內

[英]Binding ViewModel Property in a DataGrid, The Datagrid is inside a UserControl, Which is inside another usercontrol

我有一個存在於用戶控件內的 Datagrid,它位於另一個用戶控件內。 該視圖只有一個視圖 model 並且任何用戶控件都沒有單獨的視圖模型。 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>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=DataGrid},Path=DataContext.IsEncounterLocked}" Value="True">
<Setter Property="Button.IsEnabled" Value="False"/>
</DataTrigger>

綁定應該只是相對源不需要設置祖先

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM