2016-11-16 2 views
0

Ich habe eine große UserControl und für die Testzwecke erstellt, ich habe die BindingContext = this gesetzt hatte. Jetzt brauche ich eine BindableProperty, also kann ich diesen Trick nicht mehr verwenden, also wie kann ich es so einstellen, dass es sich selbst widerspiegelt?
Das Problem ist, dass ich das Usercontrol in XAML verwenden, und dann sagen, das Element für SelectedDate binded nicht vorhanden ist, wenn ich BindingContext = this gesetzt.Usercontrol selbst Bindung

Die UserControl ist so komplex, dass die einzige Sache, die ich in XAML definieren kann, ist die Haupt wie

<?xml version="1.0" encoding="UTF-8"?> 
<Grid xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="ComplexUserControl" /> 

Was ich

gehen nicht den richtigen Weg finden Ich habe eine einfache erstellt Usercontrol, so können Sie sehen, was ich versuche,

class Test : Grid 
{ 
    public static readonly BindableProperty SelectedDateProperty = BindableProperty.Create("SelectedDate", typeof(DateTime), typeof(Test), defaultValue: DateTime.Now, defaultBindingMode: BindingMode.TwoWay); 

    public DateTime Date1 
    { 
     get { return DateTime.Today.AddDays(-1); } 
    } 

    public DateTime Date2 
    { 
     get { return DateTime.Today; } 
    } 

    public DateTime Date3 
    { 
     get { return DateTime.Today.AddDays(1); } 
    } 

    public Test() 
    { 
     InitializeComponent(); 
    } 

    private void InitializeComponent() 
    { 
     ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); 
     ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); 
     ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); 

     Button btn1 = new Button(); 
     btn1.SetBinding(Button.FontSizeProperty, new Binding("SelectedDate", converter: new IsSelectedFontSizeConverter(), converterParameter: Date1)); 
     btn1.SetBinding(Button.TextProperty, new Binding("Date1", stringFormat: "dd")); 
     Children.Add(btn1, 0, 0); 

     Button btn2 = new Button(); 
     btn2.SetBinding(Button.FontSizeProperty, new Binding("SelectedDate", converter: new IsSelectedFontSizeConverter(), converterParameter: Date2)); 
     btn2.SetBinding(Button.TextProperty, new Binding("Date2", stringFormat: "dd")); 
     Children.Add(btn2, 1, 0); 

     Button btn3 = new Button(); 
     btn3.SetBinding(Button.FontSizeProperty, new Binding("SelectedDate", converter: new IsSelectedFontSizeConverter(), converterParameter: Date3)); 
     btn3.SetBinding(Button.TextProperty, new Binding("Date3", stringFormat: "dd")); 
     Children.Add(btn3, 2, 0); 
    } 
} 

Es ist möglich, wird zu tun, von außen die SelectedDate auf ein anderes Datum zu setzen.

Antwort

1

Ja, Sie können. Verwenden von x: Referenz.

<Button Text="{Binding Date3,Source={x:Reference testControl}" 
     FontSize="{Binding SelectedDate, Converter={StaticResource myConverter}, 
      ConverterParameter={Binding Date3,Source={x:Reference testControl}}}" /> 

Unterhalb Link helfen Ihnen, dieses Konzept zu verstehen. https://developer.xamarin.com/guides/xamarin-forms/xaml/xaml-basics/data_binding_basics/

+0

Wie kann ich die 'testcontrol' in C# -Code festlegen? Wie kann ich das UserControl in XAML nicht erstellen (zu viel Berechnung wird in dem UserControl in XAML ausgeführt)? –

+0

Sie müssen x: name = "testControl" Ihres Controls setzen. Erstellen Sie die test.xaml-Seite.

+0

Wie ich sehe, können Sie es nur in Xaml tun –

Verwandte Themen