Создание столбца таймера обратного отсчета в таблице данных WPF MVVM - PullRequest
0 голосов
/ 07 ноября 2019

Я работал с datagridview и связывал его источник с BindingList. У меня проблема с обновлением значения столбца таймера решетки. Каждый раз, когда я изменяю значение таймера, сетка данных не обновляется. Я уже попробовал много решений, и я придумал следующий код, но все равно ничего хорошего:

Вот мой 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, оба не годятся. Я также попытался изменить весь MyList, создав localMyList и выполнив MyList = localMyList, но все еще не обновляя

1 Ответ

1 голос
/ 07 ноября 2019

Вы забыли уведомить об изменении имущества. Так же

public class MyClass
{
    private string _countdown;
    public string Countdown
    {
        get { return _countdown; }
        set
        {
            _countdown = value;
            NotifyOfPropertyChange(() => Countdown);
        }
    }
}
...