将用户控件属性绑定到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
驻留在不同的元素树中。
你应该能够在Button
的Tag
属性绑定到父UserControl
然后通过ContextMenu
的PlacementTarget
绑定到它虽然。试试这个:
<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>
尝试使用的RelativeSource表达例如像这样绑定到您的UserConrole
CanDelete
属性:
IsEnabled={Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type YourNamespace.YourUserControleType}}, Path=CanDelete}
这种结合将搜索类型元素“YourUserControlType”在XAML树和第一元素类型起来发现它会抓住它的CanDelete属性并绑定到它。
没有工作,没有你写的..'的IsEnabled = “{绑定的RelativeSource = {的RelativeSource模式= FindAncestor,AncestorType = {X:类型的UI:ManageTransferCash}},路径= CanDelete}” ' –
非常感谢..现在工作... –