2017-11-23 1 views
0

Ich habe eine Listview mit diesem Artikel Vorlage:XAML Bindung Intellisense in einer separaten InhaltAlle Datei in einem Listview verwendet

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

ProjectListEntry ziemlich komplex ist und in einem anderen Listview verwendet, so habe ich es in einer eigenen Datei . Ich habe es wie folgt ein:

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

Wie Sie sehen können, verbindlich Intellisense (unter Verwendung von ReSharper) zu bekommen, habe ich versucht BindingContext auf ein statisches Element auf der DesignTimeData Klasse zu setzen. Dies funktioniert gut für meine Pages (wo ich den BindingContext zur Laufzeit ersetze), aber für ContentViews, die in ListViews verwendet werden, scheint der BindingContext von ContentView geerbt zu sein (von der ViewCell, nehme ich an). Dies bedeutet, dass der explizite BindingContext in meinem ContentView den BindingContext überschreibt, der von ListView in der ViewCell festgelegt wurde, und alle meine Listenelemente spiegeln die statischen Entwurfszeitdaten zur Laufzeit wider. Aber wenn ich den BindingContext entferne, erhalte ich keine IntelliSense für die Member, an die ich innerhalb der ContentView-Datei binde.

Gibt es eine einfache Möglichkeit, Intellisense für Bindungen in einem ContentView wie diesem zu erhalten?

(Wie erwähnt, kann ich ContentView nicht in der ListView-Definition inline, weil die ContentView ziemlich komplex ist und in mehreren Listen verwendet wird. Ich kann auch keine Art von VM-Locator verwenden, weil ich zwar benutze Bindings, ich benutze nicht "volle" MVVM - ich benutze stattdessen eine Redux-ähnliche Architektur. Und ich denke, ein VM-Locator würde in diesem Fall sowieso nicht funktionieren, aus den gleichen Gründen funktioniert das obige nicht.)

(aus dem Xamarin Forums Cross-gepostet wo ich keine Antwort bekommen habe.)

Antwort

0

This solution gut zu funktionieren scheint. Kurz gesagt:

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

und verwenden d:DataContext statt BindingContext hinzufügen. Wenn man von dem obigen Beispiel, sollte es so aussehen:

<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}"> 

Dies führt zu einer Bindung intellisense von ReSharper arbeiten und Probleme nicht verursachen, wenn sie laufen.

Verwandte Themen