Проблема с привязкой команды закрытия к кнопке в таблице данных Tabcontrol - PullRequest
1 голос
/ 22 марта 2009

Я использую Composite Aplication Guidiance Pattern для создания моего приложения WPF. В моей оболочке у меня есть tabcontrol, который содержит регион для динамической загрузки просмотров в регион. Представления загружаются в новые вкладки в TabControl.

  <TabControl     
      AutomationProperties.AutomationId="MainTabControl" 
      cal:RegionManager.RegionName="{x:Static inf:RegionNames.MainRegion}" 
      Width="Auto" Height="Auto" Margin="10,10,0,0" 
      HorizontalAlignment="Stretch"                            
      IsSynchronizedWithCurrentItem="True"
      ItemTemplate="{StaticResource TabItemTemplate}"
SelectionChanged="TabControl_SelectionChanged">

У меня есть DataTemplate "TabItemTemplate" для реализации CloseButton. Я не могу понять, как связать команду кнопки в шаблоне данных с командой закрытия в presentationModel. Если я связываю команду с CompositCommand, это команда executet. Но затем я должен выяснить, на какой вкладке нажата кнопка закрытия, и выполнить closeCommand только в этой PresentationModel.

<DataTemplate x:Key="ClosableTabItemTemplate">
            <DockPanel Width="120">
                <Button 
                    Command="inf:CloseCommands.CloseCommand"
                    Content="X"
                    Cursor="Hand"
                    DockPanel.Dock="Right"
                    Focusable="False"
                    FontFamily="Courier" 
                    FontSize="9"
                    FontWeight="Bold"  
                    Margin="0,1,0,0"
                    Padding="0"
                    VerticalContentAlignment="Bottom"
                    Width="16" Height="16" 
                    />
                <ContentPresenter 
        Content="{Binding}" 
        VerticalAlignment="Center" 
        />
            </DockPanel>
        </DataTemplate> 

Кто-нибудь знает, как решить эту проблему связывания ??

Ответы [ 3 ]

1 голос
/ 29 января 2014

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

<Button Content="x" Command="{Binding ElementName=Scooby, Path=Content.DataContext.CloseCommand}" />

Где Scooby - это имя моего окна оболочки, а CloseCommand - это Prism DelegateCommand в ViewModel оболочки.

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

0 голосов
/ 24 марта 2009

Я нашел решение этой проблемы. Проблема заключалась в том, что когда я связывал UserControl с TabControl, для контекста данных только для контентной панели был задан usercontrol, а текстовый заголовок для панели заголовка по-прежнему был нулевым. Но если я определю две матрицы данных, одну для элемента и одну для содержимого, а затем добавлю презентациюModel в регион, заполняется dataContext для элемента и содержимого. Затем я могу в itemTemplate связать со свойством DelegateCommand в presentationModel.

0 голосов
/ 23 марта 2009

Вам следует либо связать экземпляр команды на вашей модели представления, такой как DelegateCommand, предоставляемый свойством, либо привязать CommandParameter к DataContext элемента TabItem, чтобы элементу можно было передать общую команду.

...