2017-07-21 82 views
0

我們的系統中有幾個BindableProperties。他們大部分都在工作,而我之前沒有遇到過這個問題。我正在測試UWP,但其他平臺上的問題可能相同。Xamarin Forms - BindableProperty不工作

你可以看到在這裏下載代碼,看看到底是什麼我談論 https://[email protected]/ChristianFindlay/xamarin-forms-scratch.git

這裏是我的代碼:

public class ExtendedEntry : Entry 
{ 
    public static readonly BindableProperty TestProperty = 
     BindableProperty.Create<ExtendedEntry, int> 
     (
     p => p.Test, 
     0, 
     BindingMode.TwoWay, 
     propertyChanging: TestChanging 
    ); 

    public int Test 
    { 
     get 
     { 
      return (int)GetValue(TestProperty); 
     } 
     set 
     { 
      SetValue(TestProperty, value); 
     } 
    } 

    private static void TestChanging(BindableObject bindable, int oldValue, int newValue) 
    { 
     var ctrl = (ExtendedEntry)bindable; 
     ctrl.Test = newValue; 
    } 
} 

這是XAML:

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      xmlns:local="clr-namespace:TestXamarinForms" 
      x:Class="TestXamarinForms.BindablePropertyPage"> 
    <ContentPage.Content> 
     <StackLayout> 
      <local:ExtendedEntry Test="1" /> 
     </StackLayout> 
    </ContentPage.Content> 
</ContentPage> 

我可以看到在Test的setter中,1被傳遞給SetValue。但是,在下一行中,我查看GetValue作爲監視窗口中的屬性,並且值爲0. BindableProperty不會粘住。我試着用幾個不同的Create重載實例化BindingProperty,但似乎沒有任何工作。我究竟做錯了什麼?

回答

0

對於初學者,您正在使用的方法BindableProperty.Create已被棄用,我建議更改它。另外,我認爲你應該使用propertyChanged:而不是propertyChanging:例如:

public static readonly BindableProperty TestProperty = BindableProperty.Create(nameof(Test), typeof(int), typeof(ExtendedEntry), 0, BindingMode.TwoWay, propertyChanged: TestChanging); 

public int Test 
{ 
    get { return (int)GetValue(TestProperty); } 
    set { SetValue(TestProperty, value); } 
} 

private static void TestChanging(BindableObject bindable, object oldValue, object newValue) 
{ 
    var ctrl = (ExtendedEntry)bindable; 
    ctrl.Test = (int)newValue; 
}