尽管使用了ObservableCollection(UWP,XAML),UI仍未更新。

20 浏览
0 Comments

尽管使用了ObservableCollection(UWP,XAML),UI仍未更新。

我对这个绑定问题非常感激能得到一些帮助。基本上,我有一个显示有关文件信息的列表视图。在列表视图项本身中,有一些文本和一个按钮。

当点击该按钮时,我想要禁用该按钮。

目前,我已经设置了一个ObservableCollection - 然而,即使按钮点击被注册了,UI并不会更新。如果我转到不同的屏幕然后返回,然后UI就会更新。所以它不是即时的。

我认为在RaisePropertyChanged()的工作方式上有一些问题。我从阅读其他SO文章中了解到,与在ListView中删除或添加一个项目相比,对象中的属性更难以被检测到。

我完全被困住了,任何帮助将不胜感激。谢谢。

Xaml:

0
0 Comments

在这个问题中,出现的原因是在更改对象的属性时没有正确地通知UI进行更新。具体来说,问题是在应该通知`IsEnabled`属性变化时,错误地通知了`IsChecked`属性的变化。

解决这个问题的方法是正确地通知`IsEnabled`属性的变化。`ObservableCollection`只有在其中的对象被添加或移除时才会发出通知,而对象内部属性的变化不会被它自动通知。

以下是正确的解决方法,通过正确地通知`IsEnabled`属性的变化来更新UI:

1. 在对象的属性`IsEnabled`上添加`INotifyPropertyChanged`接口的实现,以便在属性变化时通知UI进行更新。这可以通过在类中添加以下代码来实现:

public class YourClass : INotifyPropertyChanged
{
    private bool _isEnabled;
    public bool IsEnabled
    {
        get { return _isEnabled; }
        set
        {
            if (_isEnabled != value)
            {
                _isEnabled = value;
                OnPropertyChanged(nameof(IsEnabled));
            }
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

2. 确保在更改`IsEnabled`属性的代码中,调用`IsEnabled`属性的set方法来触发属性变化的通知。例如:

YourClass.IsEnabled = true;

3. 在XAML中,将绑定设置为`IsEnabled`属性,以使UI能够正确地响应该属性的变化。例如:

通过正确地通知`IsEnabled`属性的变化,可以确保UI正确地更新,并根据属性的值进行相应的操作。这样,即使使用`ObservableCollection`,也能正确地更新UI。

0