我一直在使用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,但仍然没有更新