Объект пользовательского интерфейса на том же уровне дерева XAML, что и CommandParameter - PullRequest
0 голосов
/ 19 сентября 2011

У меня есть дерево XAML следующим образом:

<Window>
    <Grid>
        <DockPanel>
               <DataGrid>
                      <DataGrid.Resources>
                              <CheckBox Command="{Binding Command}" CommandParameter="??" />
                      </DataGrid.Resources>
               </DataGrid>
              <StackPanel>
                    <ChartLegend>
                    </ChartLegend>
                    <DataChart>
                    </DataChart>
              </stackPanel>
        </DockPanel>
    </Grid>
</Window>

Я хочу, чтобы DataChart объект был CommandParameter на ViewModel из Command на DataGrid.

Мои выводы:

Я получаю DockPanel объект как CommandParameter, затем я должен применить метод FindName(""), чтобы получить DataChart.И делать дальнейшие модификации.

Но я хочу, чтобы объект DataChart напрямую, чтобы избежать TypeCasting или поиска по дереву.

1 Ответ

0 голосов
/ 19 сентября 2011

Вы можете хранить таблицу данных как именованный ресурс в ваших DockPanel ресурсах и использовать статическую привязку ресурса к параметру команды. Затем используйте ContentControl для размещения.

вот так ...

    <DockPanel>
            <DockPanel.Resources>
                 <DataChart x:Key="MyDataChart">
                 </DataChart>
            </DockPanel.Resources>
            <DataGrid>
                   <DataGrid.Resources>
                           <CheckBox 
                                 Command="{Binding Command}"
                                 CommandParameter="{StaticResource MyDataChart}" />
                   </DataGrid.Resources>
            </DataGrid>
           <StackPanel>
                 <ChartLegend>
                 </ChartLegend>
                 <ContentControl Content="{StaticResource MyDataChart}"/>
           </stackPanel>
     </DockPanel>

Надеюсь, что вы не будете использовать same MyDataChart для размещения в другой области (так как это приведет к ошибке "визуальное отключение родительского дерева")

Хотя я должен спросить вас об этом ... почему в ваших DataGrid ресурсах есть одинокий CheckBox?

Кроме того, ваше и мое решение нарушает MVVM, потому что мы предоставляем элемент управления UI (элемент управления Chart) для модели представления.

...