在WPF DataGrid MVVM中创建一个倒数计时器列

我一直在使用datagridview并将其源绑定到BindingList。我在更新datagrid的Timer Column值时遇到问题。每次更改计时器的值时,datagrid不会更新。我已经尝试了许多解决方案,但想出了以下代码,但效果仍然不佳:

这是我的XAML:

<DataGrid ItemsSource="{Binding MyList}">
    <DataGridTextColumn Header="Timer" Binding="{Binding Path=Countdown,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
</DataGrid>

这是我的课程:

public class MyClass
{
    public string Countdown {get;set;}
}

这是我的ViewModel:

public class MyViewModel
{
    private BindingList<MyClass> _myList;
    public BindingList<MyClass> MyList
    {
        get { return _myList; }
        set
        {
            _myList= value;
            NotifyOfPropertyChange(() => MyList); //I am using Caliburn's Screen
        }
    }
}

这是我更改属性的方式:

void OnButtonClick()
{
    var fireAndForget = Task.Run(async () =>
    {
        int currentRowIndex = 0; 
        for (int i = 30; i > 0; i--)
        {
            MyList[currentRowIndex].CountDown = i.ToString();
            MyList.ResetBindings();
            await Task.Delay(1000);
        }
    }
}

这只会在“计时器”列中显示30,并且不会更新。

我也尝试使用TrulyObservableCollection和FullyObservableCollection,两者都不好。我还尝试通过创建localMyList并执行MyList = localMyList来更改整个MyList,但仍然没有更新

a476188049 回答:在WPF DataGrid MVVM中创建一个倒数计时器列

您已忘记通知属性已更改。

public class MyClass
{
    private string _countdown;
    public string Countdown
    {
        get { return _countdown; }
        set
        {
            _countdown = value;
            NotifyOfPropertyChange(() => Countdown);
        }
    }
}
本文链接:https://www.f2er.com/3146870.html

大家都在问