2017-10-05 9 views
0

おはよう。 UserControlのUserControlプロパティにバインドしようとしているUserControlのDataGridにContextMenuがありますが、バインディングが機能していません。データグリッド内のボタンContextMenuにUserControlプロパティをバインドします。

UserControlの名前

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

たContextMenuで私のバインディングCanDelete私のUserControlの名前

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

に私は助けを必要としてください。前もって感謝します。

答えて

1

ContextMenuが異なる要素ツリーに存在するため、ElementNameを親のUserControlにバインドすることはできません。

あなたは親UserControlButtonTagプロパティをバインドして、しかし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

ありがとう。 –

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}" ' –

関連する問題