c# - Button 的绑定命令
问题描述
我有轮播视图和绑定属性:
<ContentView>
<controls:CarouselViewControl x:Name="CarouselData" ItemsSource="{Binding StartDisplay}"
ShowIndicators="True"
ShowArrows="False"
IndicatorsTintColor="BurlyWood" CurrentPageIndicatorTintColor="DarkGoldenrod">
<controls:CarouselViewControl.ItemTemplate>
<DataTemplate >
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="100" />
<RowDefinition Height="100" />
</Grid.RowDefinitions>
<Image Grid.RowSpan="3" Aspect="AspectFill" Source="{Binding Image}"/>
<ContentView Grid.Row="0" Padding="60,30,60,0">
</ContentView>
<ContentView Grid.Row="1" Padding="20,10,20,50">
<Label Text="{Binding Message}"
TextColor="Black"
FontSize="20"
HorizontalTextAlignment="Center" />
</ContentView>
<ContentView Grid.Row="2" Padding="20,10,20,50">
<Button Text="Getted start" IsVisible="{Binding VisibleStartButton}"/>
</ContentView>
</Grid>
</DataTemplate>
</controls:CarouselViewControl.ItemTemplate>
</controls:CarouselViewControl>
</ContentView>
我将ItemsSource指向CarouselView。类模型视图:
public class StartPageViewModel: BaseViewModel // ViewModel
{
private ObservableCollection<DataCarouselView> startDisplay;
public ObservableCollection<DataCarouselView> StartDisplay
{
get => startDisplay; set => SetProperty(ref startDisplay, value);
}
public StartPageViewModel()
{
StartDisplay = new ObservableCollection<DataCarouselView>(new[]
{
new DataCarouselView("back_1.png", "test1"),
new DataCarouselView("back_2.png", "test2"),
new DataCarouselView("back_3.png", "test3"),
new DataCarouselView("back_4.png", "test4", true)
});
OpenMenuPageCommand = new OpenMenuPageCommand(this);
}
}
班级型号:
public class DataCarouselView // Model
{
public string Image { get; set; }
public string Message { get; set; }
public bool VisibleStartButton { get; set; }
public DataCarouselView(string image, string message, bool vis = false)
{
Image = image;
Message = message;
VisibleStartButton = vis;
}
}
一切正常。
我想为按钮添加命令。我创建命令类:
public class OpenMenuPageCommand : ICommand
{
public event EventHandler CanExecuteChanged;
private StartPageViewModel viewModel;
public OpenMenuPageCommand(StartPageViewModel vm)
{
viewModel = vm;
}
public bool CanExecute(object parameter)
{
return viewModel != null;
}
public void Execute(object parameter)
{
if (CanExecute(parameter))
viewModel.OpenMenuPage();
}
}
和 ViewModel 类中的属性:
public ICommand OpenMenuPageCommand { get; }
和 ViewModel 类中的方法命令:
public async void OpenMenuPage()
{
await navigation.PushAsync(new MenuPage());
}
如何为按钮绑定命令?谢谢。
解决方案
您需要使用相对源绑定才能使其工作
首先将根控件的名称设置如下:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Name="InfoView"
x:Class="InfoSeries.Views.InfoView">
然后您可以参考InfoView
以便Button
Command
与您的 ViewModel 绑定:
<Button Text="Getted start" IsVisible="{Binding VisibleStartButton}" Command="{Binding Source={x:Reference InfoView}, Path=BindingContext.OpenMenuPageCommand}"/>
推荐阅读
- spring-boot - SpringBoot spring-boot-starter-web-services 和 spring-boot-starter-webflux 中断 DSL 路由
- windows - 如果未通过,Gnuplot如何将变量设置为标准输入
- c# - 如何在c#中制作一侧圆形按钮?
- javascript - 为什么我在用 axios 发出 post 请求时得到 401 未授权,但同样的请求适用于 postman
- mocking - 我们可以使用 PowerMockito 模拟具有多个参数的私有方法吗?
- rasa - 如何在 Bot Emulator 中测试 Rasa Chatbot
- python - 尝试连接蓝牙时出现 OSError。我该如何解决?(连接板蓝牙HC-06)
- python - statsmodels 如何估计参数的标准误差?
- python-3.x - Python 数据框插入 Azure SQL
- python - 我正在尝试获取一串序列号,但收到一条错误消息,提示未定义变量