Редактируемый шаблон ItemsControl DataTemplate с шаблоном MVVM в WPF 4.0

У меня проблема с определением элементов в моих ItemsControls (или в моем представлении или модели представления). Может я чего-то не знаю про 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>

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

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


person stukselbax    schedule 27.06.2011    source источник


Ответы (2)


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

<Hyperlink Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, 
                                              AncestorType=ItemsControl}, 
                    Path=DataContext.DeleteFileGroup}" 
           CommandParameter="{Binding}">
              <Run Text="Delete group"/>
</Hyperlink>
person stukselbax    schedule 29.06.2011

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

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