【发布时间】:2021-05-11 14:48:34
【问题描述】:
我正在使用 ToolKits Expander,我正在尝试绑定一个命令,这是我目前得到的:
public partial class AssignTaskPage : ContentPage
{
public AssignTaskPage()
{
InitializeComponent();
GetMathSubCatgories = new Command(() => MathSubCatgoriesCommand());
}
public ICommand GetMathSubCatgories { get; private set; }
void MathSubCatgoriesCommand()
{
Console.Write("Here");
}
}
在我看来
<xct:Expander Command="{Binding GetMathSubCatgories}">
<xct:Expander.Header>
<Frame Padding="10" Margin="10" HasShadow="False" BorderColor="LightGray" VerticalOptions="CenterAndExpand">
<StackLayout Orientation="Horizontal">
<Image Source="{Binding icon}" WidthRequest="25" HeightRequest="25"></Image>
<Label Text="{Binding name}" TextColor="{Binding textColor}" FontSize="Large" FontAttributes="Bold" HeightRequest="35" VerticalOptions="CenterAndExpand"></Label>
</StackLayout>
</Frame>
</xct:Expander.Header>
<Grid Padding="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<ListView x:Name="SubCategories" ItemsSource="{Binding subCategories}" ItemSelected="SubCategories_ItemSelected">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Label Text="{Binding name}" TextColor="#02cc9d" FontAttributes="Bold" HeightRequest="35" VerticalOptions="CenterAndExpand"></Label>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</xct:Expander>
这根本不起作用,(我在 Console.Write("Here"); 上放了一个断点,但它没有击中它)
所以我做了一些挖掘并找到了这个教程:
这是 git 中的示例。
https://github.com/SyncfusionExamples/command-to-expander-in-itemtemplate-listview-xamarin
我明白我必须在这里做什么,我面临的问题是当这个命令被调用时,我正在寻找一个值并在我的 AssignTaskPage 中使用它,但是本教程所说的有一个 ViewModel 是在一个单独的文件中。那么我是否应该在我的 AssignTaskPage 中设置一个 MessagingCenter 并在 ViewModel 中调用它以获取我想要的值并将其传递给 AssignTaskPage?
【问题讨论】:
-
是的,绑定基于 MVVM 模式,您需要一个 ViewModel 以便您的绑定工作,您需要将您的 xaml 的 bindingcontext 分配给您创建的新类(ViewModel)(其中命令将被调用)而不是代码隐藏文件。
-
好的,我正计划为绑定添加一个参数,如何将该参数返回到 AssignTaskPage?消息中心?
-
在视图模型中而不是在代码隐藏中执行此操作是个好主意 检查命令参数在此处的使用方式docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/… 如果您希望视图模型中的某些内容更改视图,则需要两种方式绑定默认是一种方式。
标签: c# xamarin.forms