2017-11-23 1 views
0

나는이 항목 템플릿을 사용하여 ListView에 있습니다XAML 바인딩 인텔리

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

ProjectListEntry 상당히 복잡하고 서로의 ListView에 사용됩니다, 그래서 자신의 파일에 있습니다 . 나는이처럼 설정 한 : 당신이 볼 수 있듯이

<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에서 사용되는 ContentViews의 경우 ContentView의 BindingContext가 ViewCell에서 상속 된 것처럼 보입니다. 즉, 내 ContentView의 명시 적 BindingContext는 실제로 ListView에 의해 ViewCell에 설정된 BindingContext를 재정의하고 모든 내 목록 요소는 런타임에 정적 디자인 타임 데이터를 반영합니다. 그러나 BindingContext를 제거하면 ContentView 파일 내부에 바인딩하는 멤버에 인텔리 센스가 없습니다.

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에서 바인딩 인텔리 작업에 이르게 및 실행시 문제가 발생하지 않습니다.