gpt4 book ai didi

xamarin - 如何使用 Xamarin.Forms 在单元格中创建 >?

转载 作者:行者123 更新时间:2023-12-03 21:43:23 25 4
gpt4 key购买 nike

我有一个应用程序,我可以在其中更改卡片的顺序和显示方式。对于拥有 iOS 的任何人,我都需要与“设置”>“联系人”>“排序顺序”页面的工作方式非常相似的东西。

这显示了两行。一个是 First,Last,另一个是 Last,First。当用户单击一行时,它就像一个单选按钮,并且在该行的末尾出现一个刻度线。

我想尝试实现这个功能,但我不知道从哪里开始。我应该用 ViewCell 还是 TextCell 来做这件事,有没有人知道它是如何实现的?

.

最佳答案

编辑 1 :简化了 iOS 渲染器中的属性更改逻辑;现在没有要清理的引用或处理程序。

扩展@hankide的答案:

您可以创建可绑定(bind)属性 IsChecked同时延长 TextCellViewCell并将你的虚拟机状态绑定(bind)到它。

public class MyTextCell : TextCell
{
public static readonly BindableProperty IsCheckedProperty =
BindableProperty.Create(
"IsChecked", typeof(bool), typeof(MyTextCell),
defaultValue: false);

public bool IsChecked
{
get { return (bool)GetValue(IsCheckedProperty); }
set { SetValue(IsCheckedProperty, value); }
}
}

下一步是创建监听此属性并在 iOS 级别显示复选标记的渲染器。
[assembly: ExportRenderer(typeof(MyTextCell), typeof(SampleApp.iOS.MyTextCellRenderer))]
namespace SampleApp.iOS
{
public class MyTextCellRenderer : TextCellRenderer
{
public override UITableViewCell GetCell(Cell item, UITableViewCell reusableCell, UITableView tv)
{
var nativeCell = base.GetCell(item, reusableCell, tv);

var formsCell = item as MyTextCell;
SetCheckmark(nativeCell, formsCell);

return nativeCell;
}

protected override void HandlePropertyChanged(object sender, PropertyChangedEventArgs args)
{
base.HandlePropertyChanged(sender, args);

System.Diagnostics.Debug.WriteLine($"HandlePropertyChanged {args.PropertyName}");
if (args.PropertyName == MyTextCell.IsCheckedProperty.PropertyName)
{
var nativeCell = sender as CellTableViewCell;
if (nativeCell?.Element is MyTextCell formsCell)
SetCheckmark(nativeCell, formsCell);
}
}

void SetCheckmark(UITableViewCell nativeCell, MyTextCell formsCell)
{
if (formsCell.IsChecked)
nativeCell.Accessory = UITableViewCellAccessory.Checkmark;
else
nativeCell.Accessory = UITableViewCellAccessory.None;
}
}
}

示例使用 1

而且,示例用法如下:
<TableView Intent="Settings">
<TableSection Title="Sort Order">
<local:MyTextCell Text="First Last" IsChecked="false" />
<local:MyTextCell Text="Last, First" IsChecked="true" />
</TableSection>
</TableView>

示例使用 2

您也可以收听 Tapped确保事件 IsChecked属性(property)按预期工作。

例如,将此属性绑定(bind)到 ViewModel:
<TableView Intent="Settings">
<TableSection Title="Sort Order">
<local:MyTextCell Tapped="Handle_Tapped" Text="{Binding [0].Name}" IsChecked="{Binding [0].IsSelected}" />
<local:MyTextCell Tapped="Handle_Tapped" Text="{Binding [1].Name}" IsChecked="{Binding [1].IsSelected}" />
</TableSection>
</TableView>

并处理点击事件:
public SettingViewModel[] Settings = new []{
new SettingViewModel { Name = "First Last", IsSelected = false },
new SettingViewModel { Name = "Last First", IsSelected = true },
};

void Handle_Tapped(object sender, System.EventArgs e)
{
var cell = sender as TextCell;
if (cell == null)
return;

var selected = cell.Text;
foreach(var setting in Settings)
{
if (setting.Name == selected)
setting.IsSelected = true;
else
setting.IsSelected = false;
}
}

enter image description here

关于xamarin - 如何使用 Xamarin.Forms 在单元格中创建 >?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45762108/

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