binding a command inside a listbox item to a property on the viewmodel parent

后端 未结 7 2078
北海茫月
北海茫月 2020-12-15 18:42

I\'ve been working on this for about an hour and looked at all related SO questions.

My problem is very simple:

I have HomePageVieModel:

Home         


        
相关标签:
7条回答
  • 2020-12-15 19:31

    There's two issue working against you here.

    The DataContext for the DataTemplate is set to the item the template is displaying. This means you can't just use binding without setting a source.

    The other issue is that the template means the item is not technically part of the logical tree, so you can't search for ancestors beyond the DataTemplate node.

    To solve this you need to have the binding reach outside the logical tree. You can use a DataContextSpy defined here.

    <ListBox ItemsSource="{Binding Path=AllNewsItems}">
        <ListBox.Resources>
            <l:DataContextSpy x:Key="dataContextSpy" />
        </ListBox.Resources>
    
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock>
                       <Hyperlink Command="{Binding Source={StaticResource dataContextSpy}, Path=DataContext.OpenNews}" CommandParameter="{Binding}">
                           <TextBlock Text="{Binding Path=NewsContent}" />
                       </Hyperlink>
                   </TextBlock>
               </StackPanel>
           </DataTemplate>
       </ListBox.ItemTemplate>
    </ListBox>
    
    0 讨论(0)
提交回复
热议问题