2016-12-13 99 views
1

使用Prism爲Xamarin形式內結合命令,我有一個ListView這樣的:一個DataTemplate(XF /棱鏡)

<ListView ItemsSource="{Binding Conditions}"> 
    <ListView.ItemTemplate> 
      <DataTemplate> 
       <ViewCell> 
        <Grid Margin="4" RowSpacing="0"> 
         <Button Command="{Binding DoSomething}"/> 
        </Grid> 
       </ViewCell> 
      </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

其中條件是ConditionViewModel和DoSomething的命令的一個ObservableCollection位於在頁面的ViewModel。

所以,當然,綁定不會在這裏工作,因爲它的bindingcontext將成爲一個單獨的ConditionViewModel項目。

我知道相對綁定在Xamarin中不可用,並且規定的解決方案似乎是直接應用{x:Reference SomeViewModel}。但是使用Prism,View不能直接訪問ViewModel,所以這是不可能的。

我也看了這個,試圖得到一個RelativeContext標記擴展: https://github.com/corradocavalli/Xamarin.Forms.Behaviors/blob/master/Xamarin.Behaviors/Extensions/RelativeContextExtension.cs 但是,得到一個異常的RootObject爲空。

任何其他解決方案?

回答

2

如果我正確理解你的問題,你要的是這樣的:

視圖模型:

public class MyPageViewModel : BindableBase 
{ 
    public MyPageViewModel() 
    { 
     MyCommand = new DelegateCommand<MyModel>(ExecuteMyCommand); 
    } 

    public ObservableCollection<MyModel> Collection { get; set; } 

    public DelegateCommand<MyModel> MyCommand { get; } 

    private void ExecuteMyCommand(MyModel model) 
    { 
     // Do Foo 
    } 
} 

查看;

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="MyProject.Views.MyPage" 
      x:Name="page"> 
    <ListView ItemsSource="{Binding Collection}"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <ViewCell> 
        <Button Command="{Binding BindingContext.MyCommand,Source={x:Reference page}}" 
          CommandParameter="{Binding .}" /> 
       </ViewCell> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 
</ContentPage> 
+0

這完全是我所需要的。謝謝謝謝! – erin