Я создаю проект в .Net MAUI для IOS. Я тестировал работу на Android, и она не вызвала у меня никаких проблем, когда я попробовал ее на IOS, все было наоборот. У меня есть ImagenButton, который работает и запускает команду, а в IOS — нет. Ошибка заключается в следующем:
Microsoft.Maui.Controls.Xaml.Diagnostics.BindingDiagnostics: Warning: 'BindingContext' property not found on 'formaciones.ViewModels.Formacion.ActoViewModel', target property: 'Microsoft.Maui.Controls.ImageButton.Command'
И на экране я вижу кнопку, но даже если я нажму, она ничего не сделает.
Вот кнопка в представлении:
<telerik:DataGridTemplateColumn HeaderText = "" IsVisible = "True">
<telerik:DataGridTemplateColumn.CellContentTemplate>
<DataTemplate x:DataType = "vmodels:ActoViewModel">
<ImageButton x:Name = "elimina" Command = "{Binding BindingContext.SelectionCommand, Source = {x:Reference ActosL}}"
CommandParameter = "{Binding IdActo}"
WidthRequest = "26" HeightRequest = "26"
IsEnabled = "True">
<ImageButton.Source>
<FontImageSource FontFamily = "Iconsj" Glyph = "" Color = "LightCoral"/>
</ImageButton.Source>
</ImageButton>
</DataTemplate>
</telerik:DataGridTemplateColumn.CellContentTemplate>
</telerik:DataGridTemplateColumn>
В коде представления:
public ActoView() {
InitializeComponent();
vm = new ActoViewModel(this, new LocalDbService());
BindingContext = vm;
}
и в модели представления:
public ICommand SelectionCommand { get; }
public ActoViewModel()
{
}
public ActoViewModel(Page currentPage, LocalDbService dbService)
{
database = dbService;
_currentPage = currentPage;
LoadData();
CargaTitulo();
SelectionCommand = new Command(async (idActo) => await GuardarIdAc(idActo));
}
public async Task GuardarIdAc(object idActo)
{
IdActo = int.Parse(idActo.ToString());
}
Я пытался переместить кнопку, но даже если поместить ее в другую сетку, это не сработает.
Ошибка связана с моей сеткой: в Adroid я могу нажать кнопку, а в IOS — нет.
<Grid>
<Grid RowDefinitions = "*">
<Grid ColumnDefinitions = "*,*,*,*" Margin = "10">
</Grid>
<Grid Grid.Row = "0">
<telerik:RadDataGrid x:Name = "dataGrid"
ItemsSource = "{Binding Source}"
AutoGenerateColumns = "False"
BackgroundColor = "AliceBlue"
SelectionMode = "None">
<telerik:RadDataGrid.Columns>
<telerik:DataGridDateColumn PropertyName = "FechaInicio" HeaderText = "Fecha" CanUserFilter = "False"/>
<telerik:DataGridTextColumn PropertyName = "Acto" HeaderText = "Formacion" CanUserFilter = "False"/>
<telerik:DataGridNumericalColumn PropertyName = "IdActo" HeaderText = "id" IsVisible = "False" CanUserFilter = "False"/>
<telerik:DataGridTemplateColumn HeaderText = "" IsVisible = "True">
<telerik:DataGridTemplateColumn.CellContentTemplate>
<DataTemplate>
<ImageButton x:Name = "modificar"
Command = "{Binding BindingContext.SelectionCommand3, Source = {x:Reference Actos}}"
CommandParameter = "{Binding IdActo}"
WidthRequest = "26"
HeightRequest = "26"
IsEnabled = "True">
<ImageButton.Source>
<FontImageSource FontFamily = "Iconsj" Glyph = "" Color = "Grey"/>
</ImageButton.Source>
</ImageButton>
</DataTemplate>
</telerik:DataGridTemplateColumn.CellContentTemplate>
</telerik:DataGridTemplateColumn>
<telerik:DataGridTemplateColumn HeaderText = "" IsVisible = "True">
<telerik:DataGridTemplateColumn.CellContentTemplate>
<DataTemplate>
<ImageButton x:Name = "elimina"
Command = "{Binding BindingContext.SelectionCommand2, Source = {x:Reference Actos}}"
CommandParameter = "{Binding IdActo}"
WidthRequest = "26"
HeightRequest = "26"
IsEnabled = "True">
<ImageButton.Source>
<FontImageSource FontFamily = "Iconsj" Glyph = "" Color = "LightCoral"/>
</ImageButton.Source>
</ImageButton>
</DataTemplate>
</telerik:DataGridTemplateColumn.CellContentTemplate>
</telerik:DataGridTemplateColumn>
<telerik:DataGridTemplateColumn HeaderText = "">
<telerik:DataGridTemplateColumn.CellContentTemplate>
<DataTemplate>
<ImageButton x:Name = "SelectedButton"
Command = "{Binding BindingContext.SelectionCommand, Source = {x:Reference Actos}}"
CommandParameter = "{Binding IdActo}"
WidthRequest = "26"
HeightRequest = "26"
IsEnabled = "True">
<ImageButton.Source>
<FontImageSource FontFamily = "Iconsj" Glyph = "" Color = "Green"/>
</ImageButton.Source>
</ImageButton>
</DataTemplate>
</telerik:DataGridTemplateColumn.CellContentTemplate>
</telerik:DataGridTemplateColumn>
</telerik:RadDataGrid.Columns>
</telerik:RadDataGrid>
</Grid>
</Grid>
если я помещу кнопку, например, в <Shell.TitleView>, она у меня сработает.
Я инициализировал его в View.cs. Мне нужно что-нибудь еще? в том, что на Android я могу выполнить команду
Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительную информацию, чтобы выделить именно то, что вам нужно. Поскольку сейчас написано, трудно точно сказать, о чем вы спрашиваете.
Мне кажется, вы запутались в привязке: должно быть Command = "{Binding SelectionCommand [...]}, а не {Binding BindingContext.SelectionCommand}.
По сути, Binding изучает ваш BindingContext. здесь ваша кнопка пытается вызвать метод с именем BindingContext.BindingContext.SelectionCommand и не может его найти по понятным причинам. BindingContext является неявным при выполнении некоторых привязок.
когда я это делаю, он все равно не работает на IOS и перестает работать на Andorid
Кроме того, в вашей модели представления (или, по крайней мере, в коде, которым вы поделились), ваша команда называется SelectionCommandId вместо SelectionCommand. Обновите имена и сообщите нам, работает ли это :)
например, команда такая: public ICommand SelectionCommand => новая команда (GuardarIdAc); общественный асинхронный недействительный GuardarIdAc (объект idActo) {IdActo = int.Parse (idActo.ToString()); }
Любая из команд делает что-нибудь
Я не могу это проверить, так как у меня нет Telerik, попробуйте с помощью обычной команды с Console,WriteLine("Hello World!") и без параметров команды.
Я поставил точки останова, но они не проходят ни через одну, в IOS я их как будто не обнаруживаю
Это ошибка в моей сетке
Я не знаю ошибки моей сетки, в Android кнопка изображения работает, но в IOS нет @GChapX





решение заключалось в том, что telerik:RadDataGrid создал формат и конфликтовал с обычной сеткой, поэтому я удалил сетку, и все заработало.
есть ли у
ActoViewModelсвойствоBindingContext?