2016-07-06 6 views
1

내 앱에서 새로운 CarouselView 컨트롤을 사용하여 텍스트/기사 모음을 표시합니다. 컬렉션의 각 아티클에는 태그라고하는 텍스트 문자열 배열이 포함되어 있습니다. 데이터 바인딩을 허용하는 컨트롤을 사용하여 회전식보기 내에서 이러한 태그를 가로로 표시하려고합니다. 예상되는 모양은 다음과 같이 기본 텍스트 바로 아래에 있어야합니다. Expected look of tagsCarouselView의 Xamarin Forms 태그

어떻게하면이 아이디어를 얻을 수 있습니까?

+0

각보기 "획"또는 "태그"라는 전역 변수를 가질 수 있고 모든 코드에서이 액세스 할 수 있습니다 :'공공 문자열 TAG1 = "태그 1";' –

답변

1

우선 좋음/나쁨 뉴스 : ListView은 묶을 수있는 태그 집합을 표시 할 수 있지만, 불행히도 현재 Horizontal 방향을 지원하지 않으므로 사용자의 요구를 충족시키지 못합니다.

<ScrollView Orientation="Horizontal"> 
    <StackLayout x:Key="tags" Orientation="Horizontal"> 
    </StackLayout> 
</ScrollView> 

을 그리고 채우는 StackLayout 그와 뷰 모델에서 데이터 때 바인딩 컨텍스트 또는 속성 변경 :

차선책은 ScrollView에 포함 된 수평 StackLayout 될 것이다. 아래 예제는 StackLayout을뷰로 채우고 "TagStyleName"스타일을 사용하여 스타일을 지정합니다.

// Note: If this code doesn't work, someone else wrote it. 
protected override OnBindingContextChanged() { 
    var vm = this.BindingContext as MyViewModelClass; 
    if (vm == null) return; 
    vm.PropertyChanged += (o, e) => { 
    if (e.PropertyName == "Tags") { 
     WatchTagsForChanges(); 
     RefreshTags(); 
    } 
    }; 
} 

private void WatchTagsForChanges() { 
    var vm = this.BindingContext as MyViewModelClass; 
    if (vm == null) return; 

    vm.Tags.CollectionChanged += (o, e) => RefreshTags(); 
} 

private void RefreshTags() { 
    var vm = this.BindingContext as MyViewModelClass; 
    if (vm == null) return; 

    this.tags.Children.Clear() 
    foreach (var tag in vm.Tags) { 
    this.tags.Children.Add(new Label{ Text = tag, Style = "TagStyleName" })); 
    } 
} 
+0

감사합니다. 당신의 솔루션은 이전에 나에게 일어 났었지만, 회전 목마가 스 와이프되었을 때 아이들 로딩이 지연되는 것을 피하기 위해 회전식 뷰 내에서 묶을 수있는 솔루션을 찾고 있었기 때문에 나는 그것을 "PLAN B"로 보지 못했습니다. 이 [링크] (https://github.com/daniel-luberda/DLToolkit.Forms.Controls/blob/master/TagEntryView/README.md)를 보았습니다. 나는 많은 성공을 거두지 못했고 프로젝트의 시간 제약 때문에 "플랜 B"를 사용했습니다. 따라서 귀하의 답변은 답변입니다. – Noel