#c# #xamarin #xamarin.forms #xamarin.android #xamarin.ios
#c# #xamarin #xamarin.forms #xamarin.android #xamarin.ios
Вопрос:
У меня проблема. Я использую следующий код: https://github.com/Polarts/CrossFAB
В page1.xaml
я добавил FabMenu следующим образом:
<c:FloatingMenu Margin="0, 0, 10, 10" BGColor="#56D7A5" OpenIcon="openFab_icon" CloseIcon="closeFab_icon"
AbsoluteLayout.LayoutBounds=".95,.95" AbsoluteLayout.LayoutFlags="PositionProportional">
<c:FloatingButton x:Name="btnAddItem" BGColor="#59E1FF" IconSrc="add_item_icon" BindingContext="{x:Reference ItemPage}" OnClickCommand="{Binding btnAddItemCommand}" />
</c:FloatingMenu>
И в page1.xaml.cs я добавил команду следующим образом:
public partial class Page1 : ContentPage
{
public static ICommand btnAddItemCommand { get; set; }
public Page1 ()
{
InitializeComponent();
btnAddItemCommand = new Command(OpenNewItemPage);
}
private async void OpenNewItemPage()
{
await Application.Current.MainPage.Navigation.PushAsync(new NewItemPage());
}
}
Проблема в том, что когда я нажимаю кнопку, она выдает ошибку в FloatingButton.xaml.cs
строке: OnClickCommand.Execute(null);
.
Ошибка:
Ссылка на объект не установлена для экземпляра объекта
Это связано с тем, что в соответствии с моим кодом OnClickCommand
не установлен экземпляр, поэтому имеет значение null. Код FloatingButton.xaml.cs можно найти здесь: https://github.com/Polarts/CrossFAB/blob/master/CrossFAB/Controls/FloatingButton.xaml.cs
Как я могу это исправить?
Комментарии:
1. что показывает трассировка стека? Какой элемент на самом деле равен нулю?
2. В трассировке стека я вижу только это:
0x8 in MyApp.FabMenu.FloatingButton.<OnPropertyChanged>b__18_0 at C:UsersmesourcereposMyAppMyAppMyAppFabMenuFloatingButton.xaml.cs:94,21
что это значит?3. исключение возникает в строке 94 FloatingButton.xaml.cs
4. Затем я снова в этой строке:
OnClickCommand.Execute(null);
, но я не знаю, почему это выдает мне ошибку?5. это опечатка в вашем конструкторе?
btnAddHomeworkCommand
Ответ №1:
Я думаю, что вы не связываете команду успешно.
В .cs установите BindingContext = this;
и не определяйте btnAddItemCommand
как статическое свойство:
public partial class MainPage : ContentPage
{
public ICommand btnAddItemCommand { get; set; }
public MainPage()
{
InitializeComponent();
btnAddItemCommand = new Command(OpenNewItemPage);
BindingContext = this;
}
private void OpenNewItemPage()
{
Console.WriteLine("OpenNewItemPage");
}
}
В xaml удалите часть BindingContext:
<StackLayout>
<!-- Place new controls here -->
<Button x:Name="btnAddItem" Text="test" Command="{Binding btnAddItemCommand}" />
</StackLayout>