Привязка дает UnsetValue при множественном связывании

У меня есть сетка данных, которая получает свои данные из данных, например, изнутри, если есть текстовое поле с контекстным меню, и у этого контекстного меню есть преобразователь (с многосвязной связью). я получаю UnsetValue. Это код xaml:

<DataGrid AutoGenerateColumns="False" HorizontalAlignment="Stretch"  VirtualizingStackPanel.VirtualizationMode="Recycling" VirtualizingStackPanel.IsVirtualizing="True"  Margin="0,1,0,0" x:Name="TrackingDataGrid" IsReadOnly="True" CanUserAddRows="False"  CanUserDeleteRows="False"  IsManipulationEnabled="True"  CanUserResizeColumns="False" ItemsSource="{Binding TrackingTable}" ColumnHeaderStyle="{DynamicResource dataGridColumnStyle}"  Style="{DynamicResource dataGridStyle}"  EnableColumnVirtualization="True"  IsEnabled="True" BorderThickness="0" CellStyle="{DynamicResource CellStyleBase}" VerticalGridLinesBrush="#FFA0A7AD"  RowHeight="30" MinRowHeight="20" GridLinesVisibility="None" SelectionMode="Single" Grid.Row="1" Grid.ColumnSpan="10" Panel.ZIndex="4" MinHeight="30" Loaded="TrackingDataGrid_Loaded" CanUserReorderColumns="False" VerticalScrollBarVisibility="Disabled" ScrollViewer.CanContentScroll="True">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Process Time" IsReadOnly="True"  Width="100">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock   Text="{Binding DeliveryDate}" TextTrimming="CharacterEllipsis" >
                        <TextBlock.ContextMenu>
                            <ContextMenu>
                                <MenuItem x:Name="StandbyProcessMenuITem" Header="StandBy Process" Click="StandbyProcessMenuITem_Click" >
                                    <!--<MenuItem.Visibility>
                                            <MultiBinding Converter="{StaticResource RowUndoButtonVisibility}">
                                                <Binding Path="ProductIsStandby" />
                                                <Binding Path="ProductIsDone" />
                                            </MultiBinding>
                                        </MenuItem.Visibility>-->
                                </MenuItem>
                                <MenuItem x:Name="UndoProcessMenuITem" Header="Undo Process" Click="UndoProcessMenuITem_Click" >
                                    <MenuItem.Visibility>
                                        <MultiBinding Converter="{StaticResource RowUndoButtonVisibility}">
                                            <Binding Path="{Binding ProductIsStandby}" />
                                            <Binding Path="{Binding ProductIsDone}" />
                                        </MultiBinding>
                                    </MenuItem.Visibility>
                                </MenuItem>
                                <MenuItem x:Name="FinishProcessMenuITem" Header="Finish Process" Click="FinishProcessMenuITem_Click">
                                </MenuItem>
                            </ContextMenu>
                        </TextBlock.ContextMenu>
                    </TextBlock>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

1 ответ

DataContext из MenuItem это не то же самое, что DataContext из CellTemplate но вы могли бы использовать RelativeSource привязать к PlacementTarget из ContextMenu:

<MenuItem x:Name="UndoProcessMenuITem" Header="Undo Process" Click="UndoProcessMenuITem_Click" >
    <MenuItem.Visibility>
        <MultiBinding Converter="{StaticResource RowUndoButtonVisibility}">
            <Binding Path="{Binding PlacementTarget.DataContext.ProductIsStandby, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
            <Binding Path="{Binding PlacementTarget.DataContext.ProductIsDone, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
        </MultiBinding>
    </MenuItem.Visibility>
</MenuItem>
Другие вопросы по тегам