2016-11-16 71 views
0

我創建了一個大的UserControl,並且爲了測試目的,我設置了BindingContext = this。現在我需要一個BindableProperty,所以我不能再使用這個技巧了,所以我怎麼能設置它來反映它自己?
問題是,我在XAML中使用UserControl,然後它說,SelectedDate綁定的元素不存在,當我設置BindingContext = thisUserControl綁定到自己

UserControl是如此的複雜,唯一的事情,我可以在XAML定義是主要的像

<?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" /> 

我不找到合適的方式去

我創建了一個簡單的UserControl,所以你可以看到,我正在嘗試做什麼

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); 
    } 
} 

從外部應該可以將SelectedDate設置爲另一個日期。

回答

1

是的,你可以。使用x:參考。

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

下面的鏈接可以幫助你理解這個概念。 https://developer.xamarin.com/guides/xamarin-forms/xaml/xaml-basics/data_binding_basics/

+0

如何在c#代碼中設置'testcontrol'?因爲我無法在XAML中創建UserControl(在UserControl中進行的計算太多,無法在XAML中執行)? –

+0

您必須設置控件的x:name =「testControl」。 創建test.xaml頁面。

+0

正如我所看到的,你只能在xaml –