gpt4 book ai didi

c# - 更新 "live"WPF Canvas (折线),当 PointCollection 发生变化时

转载 作者:行者123 更新时间:2023-11-30 18:31:52 25 4
gpt4 key购买 nike

我正在 WPF Canvas 中创建一条多段线,它会根据模型中发生的计算在点击按钮时更新它的位置。我正在使用 MVVM 模式。

我的 XAML 代码:

<Grid>
<StackPanel>
<Button Margin="10" Command="{Binding Path=RunAnalysisCmd}">Rune analysis!</Button>
<Canvas>
<Polyline Points="{Binding ModelPathPoints, UpdateSourceTrigger=PropertyChanged}" Stroke="Blue" StrokeThickness="2"/>
</Canvas>
</StackPanel>
</Grid>

在我的 ViewModel 中,我有一个存储路径点的 PointCollection 属性。

private PointCollection _modelPathPoints = new PointCollection();
public PointCollection ModelPathPoints
{
get { return _modelPathPoints; }
set
{
_modelPathPoints = value;
NotifyPropertyChanged("ModelPathPoints");
}
}


public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}

RunAnalysis 方法运行良好,我已经使用 Consol 输出对其进行了测试。我的问题是当 PointCollection 中的点发生变化时 Canvas 没有发生变化。

public void RunAnalysis()
{
double angle = 0;
for (int i = 0; i < 1000; i=i+10)
{
Model.TranslateModelEdgeNodes(i, i);
Model.RotateModelEdgeNodes(angle);
angle = angle + 0.1;
AddModelPointsToPointCollection();
System.Threading.Thread.Sleep(500);
}
}

public void AddModelPointsToPointCollection()
{
//ModelPathPoints.Clear();
PointCollection modelPathPoints = new PointCollection();
for (int i = 0; i < Model.ModelEdgeNodes.Count(); i++)
{
modelPathPoints.Add(new Point( XXX, XXX )) // Not important what XXX, XXX is
}
modelPathPoints.Add(new Point(XXX, XXX )); // Not important what XXX, XXX is
ModelPathPoints = modelPathPoints;
}

有人看到问题了吗?

最佳答案

为了避免怀疑 Thread.Sleep 是否会干扰 UI 做它的事情,为什么不使用点击事件,这将使它进行一次应该显而易见的迭代?

然后,在该属性设置中,您可以验证每次点击都会分配它,验证分配的点的值,以及 PropertyChanged 事件是否正在发生。

哦 - 我假设您的 View 模型实现了 INotifyPropertyChanged,并且您正在为您的 PropertyChanged 事件分配一个实际值,而您没有在上面的代码中显示?

让我知道这是否有帮助 - 如果没有,我会创建一个项目并为您检查。最好的。

关于c# - 更新 "live"WPF Canvas (折线),当 PointCollection 发生变化时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19376740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com