gpt4 book ai didi

c# - WP8 - 将命令绑定(bind)到列表中的按钮和开关

转载 作者:行者123 更新时间:2023-12-03 10:28:09 25 4
gpt4 key购买 nike

我正在使用 MVVM 模式,并且我的页面中有 LongListSelector 但我不确定如何进行这些绑定(bind):

  • 我希望在每一行中都有一个按钮,该按钮对该行中的对象执行某些操作。我在 ViewModel 中有这个准备:
    private RelayCommand<Module> goToTrackingPageCommand;

    public RelayCommand<Module> GoToTrackingPageCommand
    {
    get
    {
    return goToTrackingPageCommand
    ?? (goToTrackingPageCommand = new RelayCommand<Module>(
    NavigateToTrackingPage));
    }
    }

    private void NavigateToTrackingPage(Module module)
    {
    App.Current.SelectedModule = module;
    navigationService.NavigateTo(new Uri("/Views/ModuleTrackingPage.xaml"), UriKind.Relative);
    }

    我正在尝试像这样绑定(bind)它:
    <Button x:Name="ShowButton" Content="Show" 
    Command="{Binding GoToTrackingPageCommand}"
    CommandParameter="{Binding}"/>

    它不起作用,因为按钮在数据模板中,并且当绑定(bind)时它转到选定的模块对象而不是 ViewModel。所以我的第一个问题是如何解决它?
  • 我猜第二个有点复杂,但希望两者都能轻松解决。我也想在每一行都有 ToggleSwitch ,当值改变时我想调用 http 请求。我在数据模板中有这个:
    <toolkit:ToggleSwitch x:Name="LockSwitch" IsChecked="{Binding IsLock}" />

    我可以将绑定(bind)更改为 TwoWay,但我更改了对象中的值,并且我想使用 Module 参数调用 ViewModel 中的方法。那么我可以更改此绑定(bind)吗?我应该以某种方式从我的对象调用 ViewModel 中的方法吗?或者我应该以某种方式告诉 ViewModel 这个对象已经改变了这个值?或者我应该绑定(bind) Checked 和 Unchecked 事件?
  • 最佳答案

    关于按钮:
    您可以使用 elementName 绑定(bind)访问“父数据上下文”并设置命令参数:

    <Button Command="{Binding DataContext.GoToXyCommand, ElementName=LayoutRoot}" CommandParameter="{Binding}" />

    关于你的第二个问题:

    首先,我会检查切换按钮是否是正确的解决方案,如果更改值会触发持续时间可能更长的过程。

    WP 执行此操作的一个示例是启用/禁用飞行模式。

    我会这样做:
  • 通过 TwoWayBinding
  • 绑定(bind)到属性
  • 更改属性时,开始更新过程,禁用切换按钮并显示进度指示器。

  • 编辑:这是我最近使用的 ViewModel 的示例。
        public bool IsUpdatingPushEnabled
    {
    get { return _isUpdatingPushEnabled; }
    set { SetProperty(ref _isUpdatingPushEnabled, value); }
    }

    public bool IsPushEnabled
    {
    get { return _isPushEnabled; }
    set
    {
    if (!IsUpdatingPushEnabled)
    {
    SetProperty(ref _isPushEnabled, value);
    var t = SetPushAsync();
    }
    }
    }

    private async Task SetPushAsync()
    {
    IsUpdatingPushEnabled = true;

    try
    {
    var result = await _settingService.EnablePushAsync(IsPushEnabled);
    SetProperty(ref _isPushEnabled, result, "IsPushEnabled");
    }
    catch
    {
    //...
    }

    IsUpdatingPushEnabled = false;
    }

    关于c# - WP8 - 将命令绑定(bind)到列表中的按钮和开关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27345882/

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