将用户控件属性绑定到Datagrid中的按钮ContextMenu

将用户控件属性绑定到Datagrid中的按钮ContextMenu

问题描述:

美好的一天。 我在我的UserControl中的Datagrid中有一个ContextMenu,我试图绑定到基于UserControl Name的UserControl属性,但绑定不起作用。将用户控件属性绑定到Datagrid中的按钮ContextMenu

用户控件名称

x:Name="usercontrolManageTransferCash" 

用户控件属性

public bool CanDelete 
    { 
     get { return (bool)GetValue(CanDeleteProperty); } 
     set { SetValue(CanDeleteProperty, value); } 
    } 

public static readonly DependencyProperty CanDeleteProperty = DependencyProperty.Register("CanDelete", typeof(bool), typeof(ManageTransferCash), new PropertyMetadata(false)); 

我在文本菜单绑定CanDelete到我的用户名

<DataGrid x:Name="DG_TransferDepositHis" SelectionMode="Single" 
      VerticalAlignment="Top" Margin="0,0,0,0" FontSize="14" > 
    <DataGrid.Columns> 
     <DataGridTextColumn Visibility="Collapsed" Header="ID" Binding="{Binding TransferHistoryId}" Width="auto"/>       
     <DataGridTextColumn Header="Date" Binding="{Binding Date, Converter={StaticResource ShortDateFormatConverter}}" MinWidth="100" Width="auto"/> 
     <DataGridTextColumn Header="Timeago" Binding="{Binding TimeAgo, Converter={StaticResource TimeAgoValueConverter}}" Width="*"/> 


     <DataGridTemplateColumn Width="auto" > 
      <DataGridTemplateColumn.HeaderTemplate> 
       <DataTemplate> 
        <!--<TextBlock Text="Manage" HorizontalAlignment="Center" Margin="50,0" />--> 
       </DataTemplate> 
      </DataGridTemplateColumn.HeaderTemplate> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="1,0" > 
         <Button x:Name="btn_action" Content="Action" FontSize="11" Margin="3,0,3,0" 
           Style="{DynamicResource btn-primary}" Width="65" Click="btn_action_Click" > 
          <Button.ContextMenu> 
           <ContextMenu x:Name="bank_history_dropdown_menu" 
              Style="{DynamicResource MaterialDesignContextMenu}" >               
            <MenuItem IsEnabled="{Binding CanDelete, ElementName=usercontrolManageTransferCash}" 
             Name="menuItem_clear" Header="Clear" Height="36" Style="{StaticResource MaterialDesignMenuItem}" Click="menuItem_clear_Click" />               
           </ContextMenu> 
          </Button.ContextMenu> 

         </Button> 
        </StackPanel> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 

请我需要帮助。提前致谢。

您不能使用ElementName绑定到父UserControl,因为ContextMenu驻留在不同的元素树中。

你应该能够在ButtonTag属性绑定到父UserControl然后通过ContextMenuPlacementTarget绑定到它虽然。试试这个:

<Button x:Name="btn_action" Content="Action" FontSize="11" Margin="3,0,3,0" 
       Style="{DynamicResource btn-primary}" Width="65" Click="btn_action_Click" 
       Tag="{Binding RelativeSource={RelativeSource AncestorType=UserControl}}"> 
    <Button.ContextMenu> 
     <ContextMenu x:Name="bank_history_dropdown_menu" Style="{DynamicResource MaterialDesignContextMenu}" > 
      <MenuItem IsEnabled="{Binding PlacementTarget.Tag.DataContext.CanDelete, RelativeSource={RelativeSource AncestorType=ContextMenu}}" 
         Name="menuItem_clear" Header="Clear" Height="36" Style="{StaticResource MaterialDesignMenuItem}" Click="menuItem_clear_Click" /> 
     </ContextMenu> 
    </Button.ContextMenu> 
</Button> 
+0

非常感谢..现在工作... –

尝试使用的RelativeSource表达例如像这样绑定到您的UserConroleCanDelete属性:

IsEnabled={Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type YourNamespace.YourUserControleType}}, Path=CanDelete} 

这种结合将搜索类型元素“YourUserControlType”在XAML树和第一元素类型起来发现它会抓住它的CanDelete属性并绑定到它。

+0

没有工作,没有你写的..'的IsEnabled = “{绑定的RelativeSource = {的RelativeSource模式= FindAncestor,AncestorType = {X:类型的UI:ManageTransferCash}},路径= CanDelete}” ' –