私はいくつかのインタラクティブなUI要素を持つビューを持つアプリケーションを持っています。また、DispatcherTimerにUIの更新を10秒ごとに実行しています。私は、ダイナミックグリッドの子の数に基づいて、子要素を異なる方法で配置するカスタムの動的グリッドを作成しました。(WPF/C#)DispatcherTimerでループを更新するUI
しかし、私には問題があります。タイマーが起動すると、要素を更新するときに動的グリッドがループに巻き込まれてしまい、その理由がわかりません。ここでは、コードの簡易版であり、それが不十分であるなら、私に教えてください:
MainWindow.xaml.cs
public MainWindow()
{
InitializeComponent();
main = new MainView(pollCollectionMain);
RefreshTimer = new DispatcherTimer();
RefreshTimer.Tick += new EventHandler(OnTimedEvent);
RefreshTimer.Interval = new TimeSpan(0, 0, 10);
RefreshTimer.Start();
}
private void OnTimedEvent(object sender, EventArgs e)
{
//The Polling class has a variable output
pollObj = new Polling();
pollCollectionMain = pollObj.PollingCollection;
main = new MainView(pollCollectionMain);
}
main.cs
public MainView(ObservableCollection<PollingData> pollLocal)
{
dynGrid = new DynamicGrid();
p = pollLocal;
for (int i = 0; i < p.Count; i++)
{
//Making some new controls
//ControlGrid is just a Grid with mouse functionality
mainControlGrid = new ControlGrid();
mainControlGrid.Children.Add(someControl);
dynGrid.Children.Add(mainControlGrid);
}
}
DynamicGrid()、無限ループが発生する
public DynamicGrid()
{
_currentChildrenCount = 0;
//The following is the infinite loop
LayoutUpdated += (s, e) =>
{
if (Children?.Count != _currentChildrenCount)
{
_currentChildrenCount = (Children != null) ? Children.Count : 0;
OnNumberOfItemsChangedImpl();
}
};
}
です。グリッドを使用する場合とパネルを使用する場合の主な違いは何ですか? – Michael
@MichaelグリッドはPanelの実装です – nkoniishvt