Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将Usercontrol属性绑定到Datagrid中的按钮上下文菜单_C#_Wpf_Data Binding_Datagrid_User Controls - Fatal编程技术网

C# 将Usercontrol属性绑定到Datagrid中的按钮上下文菜单

C# 将Usercontrol属性绑定到Datagrid中的按钮上下文菜单,c#,wpf,data-binding,datagrid,user-controls,C#,Wpf,Data Binding,Datagrid,User Controls,你好。 我在UserControl中的Datagrid中有一个ContextMenu,我正试图根据UserControl名称将其绑定到UserControl属性,但绑定不起作用 用户控制名 x:Name="usercontrolManageTransferCash" <DataGrid x:Name="DG_TransferDepositHis" SelectionMode="Single" VerticalAlignment="Top" Margin="0,0,

你好。 我在UserControl中的Datagrid中有一个ContextMenu,我正试图根据UserControl名称将其绑定到UserControl属性,但绑定不起作用

用户控制名

 x:Name="usercontrolManageTransferCash"
<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>
用户控件属性

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));
将ContextMenu中的CanDelete绑定到我的UserControl名称

 x:Name="usercontrolManageTransferCash"
<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>


求你了,我需要帮助。提前感谢。

尝试使用相对资源表达式绑定到您的
UserConrole
CanDelete
属性,例如:

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

这种绑定将在XAML树中搜索类型为“YourUserControlType”的元素,找到的第一个元素将获取其CanDelete属性并绑定到该元素。

您不能使用
ElementName
绑定到父
UserControl
,因为
ContextMenu
位于不同的元素树中

您应该能够将
按钮的
标记
属性绑定到父
用户控件
,然后通过
上下文菜单
放置目标
绑定到它。试试这个:

<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>

不起作用,按你写的做
IsEnabled=“{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ui:ManageTransferCash}},Path=CanDelete}”