WPF: привязки команд для кнопок в сетках данных - PullRequest
1 голос
/ 28 июля 2010

В этом примере у меня есть две кнопки. Кнопка в шапке работает, но та, что в сетке, показывает ошибку, показанную ниже.

<GroupBox DockPanel.Dock="Top" >
    <GroupBox.Header>
        <StackPanel Orientation="Horizontal">
            <Label Content="Recent Servers" />
            <CheckBox Content="Auto-Refresh" />
            <Button Content="Monitor" Command="{Binding MonitorCommand, ElementName=Top}"  CommandParameter="{Binding}" />
        </StackPanel>
    </GroupBox.Header>
    <DataGrid CanUserAddRows="False" CanUserDeleteRows="False" AutoGenerateColumns="False" ItemsSource="{Binding ServerHistory}" >
        <DataGrid.Columns>
            <DataGridTextColumn Header="Machine Name" Binding="{Binding DataPoints[ServerName], Mode=OneWay}" />
            <DataGridTextColumn Header="Last Heartbeat" Binding="{Binding DataPoints[LastHeartbeat], Mode=OneWay}"/>
            <DataGridTemplateColumn Header="Monitor">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Button Content="Monitor" Command="{Binding MonitorCommand, ElementName=Top}"  CommandParameter="{Binding}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</GroupBox>

System.Windows.Data Ошибка: 4: не удается найти источник для привязки со ссылкой «ElementName = Top». BindingExpression: Path = MonitorCommand; DataItem = NULL; Целевым элементом является «Кнопка» (Имя = ''); Свойство target - «Команда» (тип «ICommand»)

1 Ответ

0 голосов
/ 28 июля 2010

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

...