2017-11-23 6 views
0

で使用される別のContentViewファイルでインテリセンスを結合:XAMLは、私はこの項目テンプレートとリストビューを持つListViewの

<ListView.ItemTemplate> 
    <DataTemplate> 
    <ViewCell> 
     <views:ProjectListEntry /> 
    </ViewCell> 
    </DataTemplate> 
</ListView.ItemTemplate> 

ProjectListEntryはかなり複雑で、別のリストビューで使用されているので、私は、独自のファイルにそれを持っています。私はこのようにそれを設定している:あなたが見ることができるように

<ContentView 
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    ... 
    BindingContext="{x:Static vms:DesignTimeData.ProjectListEntryVm}"> 

は、結合インテリセンス(ReSharperのを使用して)取得するために、私はDesignTimeDataクラスの静的メンバにBindingContextを設定しようとしました。これは、私のページ(実行時にBindingContextを置き換える場所)でうまく動作しますが、ListViewで使用されるContentViewの場合、ContentViewのBindingContextはViewCellから継承されているようです。これは、ContentViewの明示的なBindingContextが、実際にListViewによってViewCellに設定されたBindingContextをオーバーライドすることを意味し、すべてのリスト要素は、実行時に静的なデザイン時データを反映します。しかし、BindingContextを削除した場合、ContentViewファイル内にバインドしているメンバのためのインテリセンスは得られません。

このようなコンテンツビューでは、Intellisenseのバインディングを取得する簡単な方法はありますか?

(前述のとおり、ContentViewはかなり複雑で、いくつかのリストで使用されているため、ListView定義のContentViewをインライン化できません。また、私はいくつかの種類のVMロケータを使用できません。バインディング、私は "完全な" MVVMを使用していない - 私は代わりにReduxのようなアーキテクチャを使用しています。と私はVMのロケータは、上記の動作しない同じ理由でとにかくこのケースのために動作しないだろうと思う。)

(私はどんな返事を取得していないXamarin Forumsからのクロス掲載。)

答えて

0

This solutionが正常に動作するようです。要するに:

xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d" 

を追加し、d:DataContextの代わりBindingContextを使用しています。上記の例から行く、それは次のようになります。

<ContentView 
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    ... 
    BindingContext="{x:Static vms:DesignTimeData.ProjectListEntryVm}"> 

これは、ReSharperのから取り組んで結合インテリセンスにつながり、実行時に問題が発生することはありません。

関連する問題