0

これが私のユーザーコントロールコードです:

<UserControl .... x:Name="UserControl" />
<Grid x:Name="LayoutRoot" DataContext="{Binding ElementName=UserControl, Mode=OneWay}" >
    <DataGrid ItemsSource="{Binding Websites}" AutoGenerateColumns="False" CellEditEnding="DataGrid_CellEditEnding" BeginningEdit="DataGrid_BeginningEdit">
        <DataGrid.Columns>
            ...
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Button .... CommandParameter="{Binding}" >
                            <Button.Content>
                                <Image Source="./../Images/close.png" Width="15"></Image>
                            </Button.Content>
                            <Button.Command>                                                            
                                <MultiBinding Converter="{StaticResource TriggerConverter}">
                                    <Binding ElementName="UserControl" Path="DataContext.DeleteCommand" >
                                        </Binding>
                                    <Binding />
                                </MultiBinding> 
                            </Button.Command>                               
                        </Button>
                    </DataTemplate>                                             
                </DataGridTemplateColumn.CellTemplate>                                          
            </DataGridTemplateColumn>
        </DataGrid.Columns>         
    </DataGrid>     
</Grid>

    CDeleteCommand dc = null;

    public ICommand DeleteCommand
    {
        get 
        {
            if (dc!=null)
            {
                return dc;
            }
            return dc = new CDeleteCommand() { Pannel = this };
        }
    }

DeleteCommand.getにブレークポイントがあり、トリガーされません。

これが私が得ているバインディングエラーです:

Cannot find source for binding with reference 'ElementName=UserControl'. 
BindingExpression:Path=DataContext.DeleteCommand; DataItem=null; target element is
 'Button' (Name=''); target property is 'Command' (type 'ICommand')

なぜ、どうすれば修正できますか?

4

1 に答える 1

1

UserControlからはアクセスできませんDataGridTemplateColumn.CellTemplate

あなたが試すことができますRelativeSource

"{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}},
                                Path=DataContext.DeleteCommand}"

または、ViewModelをリソースに追加して、StaticResource

"{Binding DeleteCommand, Source={StaticResource ViewModel}}"

MultiBindingの場合は次のようになります。

<MultiBinding Converter="{StaticResource TriggerConverter}">
    <Binding RelativeSource="{RelativeSource AncestorType={x:Type DataGrid}}" 
        Path="DataContext.DeleteCommand" />
    <Binding />
</MultiBinding> 
于 2012-04-23T12:12:03.117 に答える