2016-05-23 2 views
1

У меня есть ListView на моей странице Windows Universal. Я использую UserControl, чтобы определить мой ItemTemplate, так что я могу использовать RelativePanel и VisualStateManager, чтобы контролировать, как мои пункты отображаются в зависимости от размера экрана ...DataBinding ListView ItemTemplate UserControl

<ListView ItemsSource="{Binding Path=AllThings}" 
      ItemContainerStyle="{StaticResource ListViewItemStyle}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <local:CrossingControl /> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

У меня есть кнопка в моей UserControl, где я хочу связать свою команду к свойству команды в ViewModel, которая является DataContext самого списка ...

<UserControl ...> 
    <RelativePanel> 
    <StackPanel x:Name="crossedEntryPanel"> 
     <Button Command="{Binding DataContext.DeleteCommand, 
          RelativeSource={RelativeSource Mode=TemplatedParent}}" 
            CommandParameter="{Binding}" 

Я попытался с помощью связывания ELEMENTNAME, но это не похоже на работу (я предполагаю, потому что мой ListView имя элемента определяется в другом файле xaml). Я также пробовал ссылку на RelativeSource, но это тоже не работает. Как я могу связать это правильно?

+0

Как насчет: http://stackoverflow.com/questions/19522202/how-to-call- Модели с функциями-в-главном-вид-модели-от-другого-вид – Alamakanambra

+0

Не совсем решает мою проблему, я боюсь. Источник родственников с типом предка, похоже, не доступен в windows universal –

+0

Как насчет того, что 'DeleteCommand' перемещен внутри' CrossingControl'? –

ответ

2

Вы можете использовать Tag собственности, чтобы сохранить DataContext из ListView и использовать его в UserControl

Вот как это делается

<ListView ItemsSource="{Binding Path=AllThings}" x:Name="listview" 
         ItemContainerStyle="{StaticResource ListViewItemStyle}"> 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <local:CrossingControl Tag="{Binding DataContext,ElementName=listview}" /> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
     </ListView> 

<UserControl x:Name="usercontrol" ...> 
    <RelativePanel> 
    <StackPanel x:Name="crossedEntryPanel"> 
     <Button Command="{Binding Tag.DeleteCommand,ElementName=usercontrol}" 
            CommandParameter="{Binding}" 

RelativeSource = {RelativeSource Mode = TemplatedParent}} ": - это указывает на controltemplate от button

Смежные вопросы