gpt4 book ai didi

c# - 相对源绑定(bind) Xamarin

转载 作者:行者123 更新时间:2023-11-30 13:43:51 25 4
gpt4 key购买 nike

我的问题是 viewcell,找不到 OnDelete 命令,因为它属于 IssueModel 类,我试图更改 Listview 的绑定(bind)上下文,但除了上述绑定(bind)之外,这不会改变任何东西.

有什么方法可以更改视单元的绑定(bind)上下文,这样我就不必将命令放入 IssueModel 了吗?

freshMvvm:FreshBaseContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:converters="clr-namespace:ASFT.Converters;assembly=ASFT"
xmlns:freshMvvm="clr-namespace:FreshMvvm;assembly=FreshMvvm"
xmlns:helperMethods="clr-namespace:ASFT.HelperMethods;assembly=ASFT"
x:Class="ASFT.Pages.IssueListPage">
<ContentPage.Resources>
<ResourceDictionary>
<converters:SelectedItemEventArgsToSelectedItemConverter x:Key="SelectedItemConverter" />
<converters:DateTextConverter x:Key="DateToTextConverter" />
</ResourceDictionary>
</ContentPage.Resources>
<ListView ItemsSource="{Binding Issues}" SeparatorColor="#444444" RowHeight="90" IsPullToRefreshEnabled="True" IsRefreshing="{Binding IsBusy}" RefreshCommand="{Binding PullRefreshCommand}" >
<ListView.Behaviors>
<helperMethods:EventToCommandBehavior EventName="ItemSelected"
Command="{Binding OnSelectedIssueCommand}"
Converter="{StaticResource SelectedItemConverter}" />
</ListView.Behaviors>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell >
<ViewCell.ContextActions>
<MenuItem Command="{Binding OnDelete}" Text="Delete" IsDestructive="True" />
</ViewCell.ContextActions>

<ViewCell.View>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="70"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="50"></ColumnDefinition>
</Grid.ColumnDefinitions>

<Image Grid.Row="0" Grid.RowSpan="3" Grid.Column="0" Source="{Binding SeverityImagePath}" HorizontalOptions="Center" VerticalOptions="Center" HeightRequest="70"/>
<Image Grid.Row="0" Grid.RowSpan="3" Grid.Column="2" Source="{Binding StatusImagePath}" HorizontalOptions="Center" VerticalOptions="Center" HeightRequest="60"/>

<Label Grid.Row="0" Grid.Column="1" Text="{Binding Title}" LineBreakMode="TailTruncation" YAlign="Center" VerticalOptions="Start" Font="Bold, Medium"/>
<Label Grid.Row="1" Grid.Column="1" Text="{Binding Created, Converter={StaticResource DateToTextConverter}}" YAlign="Center" VerticalOptions="Start" Font="Medium"/>
<Label Grid.Row="2" Grid.Column="1" Text="{Binding Description}" LineBreakMode="WordWrap" YAlign="Start" VerticalOptions="Start" Font="Small"/>
</Grid>

</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

</freshMvvm:FreshBaseContentPage>

编辑:

我尝试了其中一种答案,但没有奏效。这只是得到一条错误消息:预期类型是对象,但类型是 IssueListPageModel

     xmlns:pageModels="clr-namespace:ASFT.PageModels;assembly=ASFT"



<MenuItem Command="{Binding Path=BindingContext.OnDelete, Source={pageModels:IssueListPageModel}}" Text="Delete" IsDestructive="True" />

最佳答案

x:Name 属性添加到您的 freshMvvm:FreshBaseContentPage,例如:x:Name="MyAwesomePage"

现在像这样更改您的 ViewCell 绑定(bind):

<MenuItem Command="{Binding Path=BindingContext.OnDelete, Source={x:Reference Name=MyAwesomePage}}" Text="Delete" IsDestructive="True" />

现在,绑定(bind)源已使用其名称设置为页面。路径设置为属性 BindingContext.OnDelete。因此,在此页面的后备 View 模型中应该有一个 OnDelete 属性。

像您在评论中提出的那样澄 list 独的组件。

正则绑定(bind)省略了 Path=。如果未明确提及,{Binding MyProperty} 与“{Binding Path=MyProperty}”的含义相同。 Path 表示需要从 BindingContext 绑定(bind)的值的路径,因此实际上是您要绑定(bind)到的属性。

Source 用于指定Path 的来源。这本身就是另一种约束。在我们的例子中,引用是我们刚刚给页面命名的。这样,ViewCell 的绑定(bind)就知道从 Source 开始,然后搜索 Path 以检索其值。我希望这能让它更清楚一些。

如果您愿意,您可以在这里引用任何内容,只要您可以访问此处的类实例。但是,我建议将它保留在 BindingContext 中,它实际上是 View 模型(注意:BindingContext 是包含 View 模型的页面的实际属性)。否则您将很快失去概览。

关于c# - 相对源绑定(bind) Xamarin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49507092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com