Bind button in DataTemplate to command in the form's ViewModel

后端 未结 2 372
隐瞒了意图╮
隐瞒了意图╮ 2020-12-08 07:10

My problem is similar to the one described in this question:
WPF MVVM Button Control Binding in DataTemplate

Here is my XAML:



        
相关标签:
2条回答
  • 2020-12-08 07:56

    It's:

    {Binding DataContext.FireCommand,
             RelativeSource={RelativeSource AncestorType=ListBox}}
    

    No need to walk up to the root unless you actually change the DataContext along the way, but as the ListBox seems to bind to a property on the main VM this should be enough.

    The only thing i recommend reading is the Data Binding Overview, and the Binding class documentation (including its properties).


    Also here is a short explanation on how bindings are constructed: A binding consists of a source and a Path relative to that source, by default the source is the current DataContext. Sources that can be set explicitly are: Source, ElementName & RelativeSource. Setting any of those will override the DataContext as source.

    So if you use a source like RelativeSource and want to access something in the DataContext on that level the DataContext needs to appear in the Path.

    0 讨论(0)
  • 2020-12-08 08:02

    This may be considered unrelated by most, but this search is only 1 of 3 results that you'll find searching for data binding commands to controls inside a data template--as it relates to Xamarin Forms. So, maybe it'll help someone now-a-days.

    Like me you may wonder how to bind commands inside a BindableLayout. Credit jesulink2514 for answering this at Xamarin Forums, where it's probably overlooked by many because of all the comments. Here's his solution, but I'm including the link below:

    <ContenPage x:Name="MainPage">
    <ListView Grid.Row="1"
                  ItemsSource="{Binding Customers}"
                  VerticalOptions="Fill"
                  x:Name="ListviewCustomer">
          <ListView.ItemTemplate>
            <DataTemplate>
          <Label Text="{Binding Property}"/>
              <Button Command="{Binding BindingContext.ItemCommand, Source={x:Reference MainPage}}" 
                             CommandParameter="{Binding .}">Click me</Button>
            </DataTemplate>
          </ListView.ItemTemplate>
        </ListView>
    </ContentPage>
    

    https://forums.xamarin.com/discussion/comment/217355/#Comment_217355

    0 讨论(0)
提交回复
热议问题