3

私は実際に、 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 と見なすことができますか?

4

1 に答える 1