gpt4 book ai didi

Xamarin Forms Switch Toggled 事件未与 View 模型绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 13:05:48 24 4
gpt4 key购买 nike

我有一个表单 XAML 页面,在那里我有一个 ListView ,每个元素都有一个开关(xamarin 默认)。我可以将项目中的数据绑定(bind)到 ListView ,但我不能订阅 Switch 事件“Toggled”,因为它会导致项目不显示。我也尝试使用 ICommand 和 Command,因为它被指示使用按钮,但结果是一样的,没有显示。如何处理来自我的 View 模型的开关切换?

看法

    <?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TouristicWallet.Views.WalletManagementPage"
xmlns:vm="clr-namespace:TouristicWallet.ViewModels"
xmlns:converters="clr-namespace:TouristicWallet.Converters"
>

<ContentPage.BindingContext>
<vm:WalletManagementViewModel x:Name="ViewModel"/>
</ContentPage.BindingContext>

<ContentPage.Resources>
<ResourceDictionary>
<converters:CurrencyIdToCodeConverter x:Key="idToCodeConverter"/>
</ResourceDictionary>
</ContentPage.Resources>

<StackLayout>
<ListView x:Name="MyCurrencies" ItemsSource="{Binding Currencies, Mode=OneWay}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Horizontal">
<Label Text="{Binding Currency.Initials, Mode=OneWay}" />
<Switch IsToggled="{Binding IsOwned, Mode=TwoWay}"
Toggled="{Binding Toggled}"
/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

</StackLayout>
</ContentPage>

View 模型
public class WalletManagementViewModel : ViewModelBase
{

private readonly List<OwnedCurrencyWrapper> _currencies = new List<OwnedCurrencyWrapper>();
public List<OwnedCurrencyWrapper> Currencies { get { return _currencies; } }

public WalletManagementViewModel()
{
CurrencyDataAccess cda = new CurrencyDataAccess();
foreach (var item in cda.GetCurrencies())
{
Currencies.Add(new OwnedCurrencyWrapper(item));
}

OnPropertyChanged(nameof(Currencies));
}

public class OwnedCurrencyWrapper
{
public Currency Currency { get; private set; }
public Boolean IsOwned { get; set; }
public ICommand Toggled { get; set; }


public OwnedCurrencyWrapper(Currency currency)
{
Currency = currency;
WalletDataAccess wda = WalletDataAccess.Instance;
IsOwned = wda.IsOwned(Currency.Id);

Toggled = new Command(() => Update());
}

public void Update()
{
WalletDataAccess wda = WalletDataAccess.Instance;
if (IsOwned) wda.RemoveOwnedCurrency(Currency.Id);
else wda.OwnCurrency(Currency.Id);

}

public void Toggled_handler(object sender, ToggledEventArgs e)
{
Update();
}
}
}

我没有使用任何 mvvm 框架

最佳答案

解决方案:在做了一些研发之后,我找到了这个问题的根本原因,
第一篇文章中的错误代码:

<Switch IsToggled="{Binding IsOwned, Mode=TwoWay}"
Toggled="{Binding Toggled}"
/>
只需执行两个步骤。
  • 声明事件监听函数 OnToggled 内容页类(class)和不在您的 ViewModel 类中 你需要绑定(bind)

  • 在您的 内容页类(class)
    void OnToggled(object sender, ToggledEventArgs e){

    }
  • 更改 Toggled="{绑定(bind)切换}" == 到 ==> Toggled="OnToggled"


  • 它将解决问题, 不知道为什么它不适用于在 ViweModel 类中声明的事件监听器函数 .
    ——我希望它会起作用。

    关于Xamarin Forms Switch Toggled 事件未与 View 模型绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41070613/

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