gpt4 book ai didi

c# - ProgressRing IsActive 属性未更新

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

我正在编写一个小型 UWP 项目,也使用 MVVM 模式(MVVM Light 框架)进行学习,并且在许多场景和控件中遇到了绑定(bind)问题。

我已经努力将其中一个隔离到可用的迷你示例项目中 here .

ProgressRing 控件的 IsActive 属性不会对来自 ViewModel 端的更新使用react,即使它具有:

  • INotifyPropertyChanged 已实现
  • 绑定(bind)模式显式设置为双向绑定(bind)
  • UpdateSourceTrigger 显式设置为 PropertyChanged

  • 主页.xaml
    <Page
    x:Class="TestProgressRing.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:core="using:Microsoft.Xaml.Interactions.Core"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:i="using:Microsoft.Xaml.Interactivity"
    xmlns:local="using:TestProgressRing"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Width="491.282"
    Height="492.308"
    DataContext="{Binding MainPageViewModel, Source={StaticResource ResourceKey=Locator}}"
    mc:Ignorable="d">
    <Grid
    Width="500"
    Height="800"
    Margin="0,0,-8.667,-307.667"
    HorizontalAlignment="Left"
    VerticalAlignment="Top"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid.RowDefinitions>
    <RowDefinition Height="*" />
    <RowDefinition Height="3*" />
    </Grid.RowDefinitions>
    <Button
    Grid.Row="0"
    Width="250"
    Height="50"
    Margin="0"
    HorizontalAlignment="Center"
    VerticalAlignment="Center"
    Content="Boom">
    <i:Interaction.Behaviors>
    <core:EventTriggerBehavior EventName="Click">
    <core:InvokeCommandAction Command="{Binding ClickCommand}" />
    </core:EventTriggerBehavior>
    </i:Interaction.Behaviors>
    </Button>
    <ProgressRing
    Grid.Row="1"
    Width="500"
    Height="500"
    Margin="0"
    HorizontalAlignment="Left"
    VerticalAlignment="Top"
    IsActive="{Binding IsLoading, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
    Visibility="Visible" />
    </Grid>
    </Page>

    MainPageViewModel.cs
    using GalaSoft.MvvmLight;
    using GalaSoft.MvvmLight.Command;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Input;

    namespace TestProgressRing
    {
    public class MainPageViewModel : ViewModelBase
    {
    private bool _isLoading;
    public bool IsLoading
    {
    get => _isLoading;
    set
    {
    _isLoading = value;
    Set(() => IsLoading, ref _isLoading, value);
    }
    }

    public ICommand ClickCommand { get; set; }

    public MainPageViewModel()
    {
    ClickCommand = new RelayCommand(() =>
    IsLoading = !IsLoading);
    }
    }
    }

    UWP 控件是否不能与常规绑定(bind)而不是 x:Bind 一起使用?还有更多类似的问题,例如 CalendarPickerView 日期属性也不想合作。

    最佳答案

    首先,你不需要UpdateSourceTrigger=PropertyChanged, Mode=TwoWay在你的绑定(bind)中。它总是从源到目标(即 OneWay )。

    真正的问题是你不应该设置 _isLoading = value;因为它是作为 ref 传入的用于检查属性值是否已更改。

    因此,删除此行将使您的代码正常工作。您甚至可以将其简化为

    private bool _isLoading;
    public bool IsLoading
    {
    get => _isLoading;
    set => Set(ref _isLoading, value);
    }

    关于c# - ProgressRing IsActive 属性未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46206525/

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