Редактируемый шаблон данных ItemsControl с шаблоном MVVM в WPF 4.0 - PullRequest
3 голосов
/ 27 июня 2011

У меня проблема с определением элементов в моих ItemsControls (или в моем представлении или viewModel). Может быть, я не знаю что-то о mvvm, но вот вопрос. У меня есть DataTemplate, определенный как

<DataTemplate>
    <Expander>
        <Expander.Header>
            <StackPanel>
            <TextBlock Margin="2" Text="{Binding Name}" />
            <TextBlock>                
                <Hyperlink>
                    <Run Text="Delete group" />
                </Hyperlink>
            </TextBlock>
            </StackPanel>
        </Expander.Header>
        <Expander.Content>
            blah-blah-blah
        </Expander.Content>
     </Expander>
 </DataTemplate>

У меня много Расширителей, у каждого из них есть Гиперссылка. И я хочу, чтобы Гиперссылка удалила группу - то есть удалила соответствующий Expander. Я читал о поиске в DataTemplate с визуальным и логическим - TreeHelper, но это плохой способ решить мою проблему - он не следует mvvm. Я знаю, что мне нужно написать Команду для Гиперссылки, но как я могу получить Expander, который мне нужно удалить, и удовлетворить mvvm - вот в чем вопрос.

Любой совет, любое предложение ...

Ответы [ 2 ]

2 голосов
/ 29 июня 2011

Но, если вы не можете создать свойство static ICommand по некоторым причинам разработки, вы должны использовать RelativeSource, чтобы найти предка, для которого DataContext установлено значение ViewModel, с этой командой.

<Hyperlink Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, 
                                              AncestorType=ItemsControl}, 
                    Path=DataContext.DeleteFileGroup}" 
           CommandParameter="{Binding}">
              <Run Text="Delete group"/>
</Hyperlink>
0 голосов
/ 28 июня 2011

Все, что мне нужно сделать, - это создать свойство STATIC ICommand и использовать следующий код

<Hyperlink Command="{x:Static vm:FileGroupViewModel.DeleteGroup}" CommandParameter="{Binding}">
    <Run Text="Delete group"/>
</Hyperlink>
...