質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
.NET

.NETとは、主に.NET Frameworkと呼ばれるアプリケーションまたは開発環境を指します。CLR(共通言語ランタイム)を搭載し、入力された言語をCIL(共通中間言語)に変換・実行することが可能です。そのため、C#やPythonなど複数の言語を用いることができます。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

1622閲覧

ViewModelの中身を動的に変更する

Supermokomiti

総合スコア7

.NET

.NETとは、主に.NET Frameworkと呼ばれるアプリケーションまたは開発環境を指します。CLR(共通言語ランタイム)を搭載し、入力された言語をCIL(共通中間言語)に変換・実行することが可能です。そのため、C#やPythonなど複数の言語を用いることができます。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2022/03/05 03:46

編集2022/03/05 04:48

C# .NET6 WPFの質問です。

C#

1public partial class MainWindow : Window 2 { 3 public MainWindow() 4 { 5 InitializeComponent(); 6 7 8 } 9 } 10 11 public class Model 12 { 13 public string? Label { get; set; } 14 public string? Longitude { get; set; } 15 public string? Latitude { get; set; } 16 } 17 18 public class ViewModel 19 { 20 public ObservableCollection<Model> Models { get; set; } 21 public ViewModel() 22 { 23 this.Models = new ObservableCollection<Model>(); 24 this.Models.Add(new Model() { Label = "Tokyo", Latitude = "35.5090627", Longitude = "139.2093882" }); 25 } 26 27 }

xaml

1 <Grid.DataContext> 2 <local:ViewModel /> 3 </Grid.DataContext> 4 <syncfusion:SfMap x:Name="Maps"> 5 <syncfusion:SfMap.Layers> 6 <syncfusion:ShapeFileLayer Uri="./Japan.shp" 7 Markers="{Binding Models}"> 8 </syncfusion:ShapeFileLayer> 9 </syncfusion:SfMap.Layers> 10 </syncfusion:SfMap>

Grid.DataContextの中にあるViewModelをコード側から動的に変更したいです。
しかし、

C#

1var Point = new ViewModel(); 2 Point.Models.Add(new Model() { Label = "Tokyo", Latitude = "35.5090627", Longitude = "139.2093882" });

このようにインスタンスを作って追加しても変更できませんでした。どのようにすれば変更できるでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/03/05 04:06

> AddExecute();と書いてもビルドでエラーが発生します。 ViewModel 云々とか関係なくて、もっとごく基本的なところがダメで、(1) ViewModel クラスの private インスタンスメソッドだから、(2) そこを解決しても AddExecute(); では引数がないからということでは?
Supermokomiti

2022/03/05 04:18

public void AddExecute(string Label, string Latitude, string Longitude)にしても「現在のコンテキストに'AddExecute'という名前は存在しません」というエラーが出ます。引数を指定しても同じことが発生しました。とりあえず、その部分のコードを修正します。
退会済みユーザー

退会済みユーザー

2022/03/05 04:21

インスタンスメソッドだから呼び出すにはそれが定義されているクラスのインスタンスを生成する必要があると思うのですが・・・
guest

回答1

0

ベストアンサー

AddExecute("Tokyo","35.5090627","139.2093882");//ここで実行させたい

質問のコメント欄にも書きましたが、AddExecute はインスタンスメソッドだから呼び出すにはそれが定義されているクラスのインスタンスを生成する必要があると思うのですが・・・

そもそもの質問者さんのやりたいことに沿っているのかどうかわかりませんが、文法的には以下のようにする必要があるかと。

var vm = new ViewModel(); vm.AddExecute("Tokyo","35.5090627","139.2093882");

【追記】

下のコメント欄の 2022/03/05 15:07 の私のコメントで、

質問を大幅に書き直してますが、XAML で定義したのであれば var Point = new ViewModel(); は必要ないのでは? 別のインスタンスを作ってしまってますので。回答欄にこうしてはいかがという案を追記しておきます。

と書いた件です。これも、そもそもの質問者さんのやりたいことに沿っているのかどうかわかりませんが・・・

XAML を以下のようにして、

イメージ説明

以下の通り追加できます。[0] は ViewModel のコンストラクタで設定されたもの、[1] は MainWindow のコンストラクタのコードで設定されたものです。

イメージ説明

投稿2022/03/05 04:30

編集2022/03/05 06:14
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Supermokomiti

2022/03/05 04:50

回答ありがとうございます。質問の仕方が良くなかったです。申し訳ございません。 本当にしたいことは、ViewModelの中身を動的に変更することでした。
退会済みユーザー

退会済みユーザー

2022/03/05 06:07

質問を大幅に書き直してますが、XAML で定義したのであれば var Point = new ViewModel(); は必要ないのでは? 別のインスタンスを作ってしまってますので。回答欄にこうしてはいかがという案を追記しておきます。
Supermokomiti

2022/03/05 06:22

ありがとうございます。これで解決しそうです。前回に続きご迷惑をおかけして申し訳ございませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問