Команда связывания неисправностей в пункте меню сетки - PullRequest
0 голосов
/ 13 января 2011

У меня есть сетка, которая находится внутри производного от usercontrol класса, который называется MediatedUserControl. Я добавляю контекстное меню, чтобы пользователь мог удалить элемент, но я не смог понять, как связать команду со своим свойством команды. Я использую MVVM, и моя viewmodel реализует публичное свойство ICommand с именем DeleteSelectedItemCommand.

Однако, когда отображается представление, я получаю следующее сообщение в окне вывода:

System.Windows.Data Ошибка: 4: Не удается найти источник для привязки со ссылкой 'RelativeSource FindAncestor, AncestorType =' BRO.View.MediatedUserControl ', AncestorLevel =' 1 ''. BindingExpression: Path = DataContext.DeleteSelectedItemCommand; DataItem = NULL; целевым элементом является BarButtonItem (HashCode = 6860584); Свойство target - «Команда» (тип «ICommand»)

У меня такое чувство, что я обычно хорошо разбираюсь в таких привязках и не могу понять, что мне здесь не хватает. Спасибо за любую помощь, вы можете предоставить.

<dxg:GridControl HorizontalAlignment="Left" Margin="12,88,0,0" x:Name="gridControl1" VerticalAlignment="Top" Height="500" Width="517" DataSource="{Binding ItemList}" BorderBrush="{StaticResource {x:Static SystemColors.ActiveBorderBrushKey}}" ShowBorder="True" Background="{StaticResource {x:Static SystemColors.ControlLightBrushKey}}" UseLayoutRounding="False" DataContext="{Binding}">
<dxg:GridControl.Columns>
    <dxg:GridColumn FieldName="Code" Header="Code" Width="107" />
    <dxg:GridColumn FieldName="Name" Header="Item" Width="173" />
    <dxg:GridColumn FieldName="PricePerItem" Header="Unit Price" Width="70">
        <dxg:GridColumn.EditSettings>
            <dxe:TextEditSettings DisplayFormat="N2" />
        </dxg:GridColumn.EditSettings>
    </dxg:GridColumn>
    <dxg:GridColumn FieldName="Quantity" Header="Qty" Width="50" AllowEditing="True" />
    <dxg:GridColumn FieldName="TotalPrice" Header="Total Price" Width="90">
        <dxg:GridColumn.EditSettings>
            <dxe:TextEditSettings DisplayFormat="N2" />
        </dxg:GridColumn.EditSettings>
    </dxg:GridColumn>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
    <dxg:TableView ShowIndicator="False" ShowGroupPanel="False" MultiSelectMode="Row" AllowColumnFiltering="False" AllowBestFit="False" AllowFilterEditor="False" AllowEditing="False" AllowGrouping="False" AllowSorting="False" AllowResizing="False" AllowMoving="False" AllowMoveColumnToDropArea="False" AllowDateTimeGroupIntervalMenu="False" >
        <dxg:TableView.RowCellMenuCustomizations>
            <dxb:BarButtonItem Name="deleteRowItem" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=view:MediatedUserControl, AncestorLevel=1}, Path=DataContext.DeleteSelectedItemCommand}">
            </dxb:BarButtonItem>
        </dxg:TableView.RowCellMenuCustomizations>
    </dxg:TableView>
</dxg:GridControl.View>

1 Ответ

3 голосов
/ 13 января 2011

Я решил это, и я думаю, что это связано с тем, что это всплывающее меню и, следовательно, не в иерархии окон.Для этого DevExpress предоставляет способ возврата:

Command="{Binding Path=(dxg:GridPopupMenu.GridMenuInfo).View.DataContext.DeleteSelectedItemCommand, RelativeSource={RelativeSource Self}}"
...