2017-01-09 14 views
0

私は再利用可能なコントロールでいっぱいになったページを持つことで自分のアプリケーションを構築しようとしています。そこにあるページに応じてプロパティを設定するために、実行時にオブジェクトをカスタムコントロールにバインドしたいと思います。これまでのところ、私が試したことは正しく動作していないし、これに対してより良いアプローチがあるのだろうかと思っています。私が得ている現在のエラーは、バインディングタイプをStringに変換できないと言っています。ここまで私が試したことの一つの例があります。xamarinフォームのカスタムコントロールへのオブジェクトのバインド

ビューモデル:

public class MenuItem 
    { 
     public Page pageTo { get; set; } 
     public string title { get; set; } 
     public string subtitle { get; set; } 
     public string iconPath { get; set; } 
    } 

    public class VMMenuItem : ContentView 
    { 
     public MenuItem item { get; set; } 

    public static BindableProperty ItemProperty = BindableProperty.Create("Item", typeof(MenuItem), typeof(VMMenuItem), null, BindingMode.TwoWay,); 

    public VMMenuItem() 
    { 
     var menuTapped = new TapGestureRecognizer(); 


     StackLayout Main = new StackLayout 

     { 
      BindingContext = item, 
      Children = { 

       new SectionLine(), 
       new StackLayout 
       { 

        Padding = new Thickness(10), 
        Orientation = StackOrientation.Horizontal, 
        HorizontalOptions = LayoutOptions.Fill, 
        Children = { 
         new Label { 

          Margin = new Thickness(10, 2, 0, 0), 
          HorizontalOptions = LayoutOptions.StartAndExpand, 
          Text = "{Binding title}" 
         }, 
         new Label 
         { 

          Margin = new Thickness(10, 2, 10, 0), 
          FontSize = 14, 
          TextColor = Color.FromHex("#c1c1c1"), 
          HorizontalOptions = LayoutOptions.End, 
          Text = "{Binding subtitle}" 
         }, 
         new Image { 

          HorizontalOptions = LayoutOptions.End, 
          Source = "{Binding iconPath}", 
          WidthRequest = 20 
         } 
        } 
       } 
      } 
     }; 

     Main.GestureRecognizers.Add(menuTapped); 
     Content = Main; 
    } 

    public MenuItem menuItem 
    { 
     get { return (MenuItem)GetValue(ItemProperty); } 
     set { SetValue(ItemProperty, value); } 
    } 
} 

ページフロントエンド:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:local="clr-namespace:TamarianApp;assembly=TamarianApp" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="TamarianApp.RugPage"> 
    <Grid> 

     <local:VMMenuItem menuItem="{Binding lengthMenuItem}"></local:VMMenuItem> 

    </Grid> 
</ContentPage> 

ページバックエンド:あなたがここにバインド可能なプロパティを使用する必要が

public partial class RugPage : ContentPage 
    { 

     MenuItem lengthMenuItem; 
     public RugPage() 
     { 
      InitializeComponent(); 

      App.currentPage = this; 
      BindingContext = App.rug; 
      lengthMenuItem = new MenuItem 
      { 
       title = "length", 
       iconPath = "icons/blue/next", 
       subtitle = "somelength" 
      }; 
     } 
    } 

答えて

1

を使用する方法の例です。それら:

public static readonly BindableProperty ImageProperty = 
    BindableProperty.Create(nameof(Image), typeof(ImageSource), typeof(DashEntry), null); 
public ImageSource Image 
{ 
    get 
    { 
     return (ImageSource)GetValue(ImageProperty); 
    } 
    set 
    { 
     SetValue(ImageProperty, value); 
    } 
} 

そして、それについてのドキュメント:

https://developer.xamarin.com/guides/xamarin-forms/xaml/bindable-properties/

+0

は、私が使用しようとしてきたが、それはそれは可能System.String型に結合タイプを変換することはできませんと言って私にエラーを与え続けて厥。

関連する問題