私は実際に、 MainPageで定義された Canvas にいくつかのUIElementを非同期的に追加しようとしています。
私が理解しているようにUIElement
、 a に追加する基本的な方法Canvas
は、彼のUIElementCollectionに追加することです。たとえば、 Line を使用して、次のようにする必要があります。
Line line = new Line();
// Line attributes
line.Stroke = new SolidColorBrush(Colors.Purple);
line.StrokeThickness = 15;
Point point1 = new Point();
point1.X = 0;
point1.Y = 0;
Point point2 = new Point();
point2.X = 480;
point2.Y = 720;
line.X1 = point1.X;
line.Y1 = point1.Y;
line.X2 = point2.X;
line.Y2 = point2.Y;
// Line attributes
MyCanvas.Children.Add(line);
描画するために、この Canvas にアクセスする必要があるGraphicsを呼び出す Class があるとします。
public class Graphics
{
public void drawLine()
{
//Using Dispatcher in order to access the main UI thread
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
Line line = new Line();
// Line attributes
/**
* Here I want to access the Canvas of the MainPage
* I have no Idea what to put here !!!
*
**/
});
}
}
「ここに何を入れたらいいかわからない!!!」というところに MainPage Canvasに直接アクセスしようとした--> FAIL
UIElement を追加して Canvas に渡すためにMainPageでpublic static UIElementCollection を宣言しようとしましたが、UIElementCollection にはコンストラクターがないため不可能です --> FAIL
しかし、それらのアイデアは汚いコーディングのようで、あまりエレガントではありません。したがって、私の調査を通じて、MVVMが魔法を行うべきであることがわかりました。しかし、私が見つけたすべてのチュートリアルは、私の場合は使用できない xaml ファイルを介してデータ入札を行っていました。
だから私は2つの質問があります:
最初: Canvas の UIElementCollection はどのように使用しますか? (JAVA の Paint や Repaint のように、誰がそれを描画するかという隠しメソッドはありますか?)
2 番目: MVVM パターンに従いたい場合、MainPageを View、Graphicsクラスを ViewModel、UIElementを Model と見なすことができますか?