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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

Q&A

解決済

2回答

3842閲覧

複数のReactivePropertyを内部クラスでまとめた場合のViewの書き方

roamschemer

総合スコア31

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

0グッド

0クリップ

投稿2019/07/13 16:11

前提・実現したいこと

複数のReactivePropertyを内部クラスでまとめた場合のViewの書き方がわからないので質問させてください。

該当のソースコード

ViewModel

C#

1using Prism.Navigation; 2using Reactive.Bindings; 3 4namespace Test.ViewModels 5{ 6 public class MainPageViewModel : ViewModelBase 7 { 8 //実際には沢山のReactivePropertyが並ぶ 9 class TempSet 10 { 11 public ReactiveProperty<string> Label { get; set; } = new ReactiveProperty<string>(); 12 } 13 TempSet FastSet = new TempSet(); 14 public ReactiveProperty<string> Label2 { get; set; } = new ReactiveProperty<string>(); 15 public MainPageViewModel(INavigationService navigationService) 16 : base(navigationService) 17 { 18 FastSet.Label.Value = "ラベル"; 19 Label2.Value = "ラベル2"; 20 } 21 } 22}

View

xaml

1<?xml version="1.0" encoding="utf-8" ?> 2<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 3 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 4 x:Class="Test.Views.MainPage" 5 Title="{Binding Title}"> 6 7 <StackLayout HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand"> 8 <Label Text="{Binding FastSet.Label.Value}" /> 9 <Label Text="{Binding Label2.Value}" /> 10 </StackLayout> 11 12</ContentPage>

結果

この場合、<Label Text="{Binding FastSet.Label.Value}" />には何も表示されません。
どのように書けばよいのでしょうか?またはそもそもViewModelの書き方に問題があるのでしょうか?

補足情報

Xamarin.Forms/ReactiveProperty/Prism を使用しています。

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

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

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

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

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

Zuishin

2019/07/13 17:22

DataContext に入れてないんでしょう。
roamschemer

2019/07/13 17:48

Prism入れていても必要になるのでしょうか? <Label Text="{Binding Label2.Value}" />の方は普通に表示されます。
guest

回答2

0

ベストアンサー

TempSet をクラス内に定義するクラスではなくて普通に独立したクラスにするか、publicをつけて公開にしたうえで FastSet をフィールドではなく public なプロパティにしたらどうですか??

cs

1using Prism.Navigation; 2using Reactive.Bindings; 3 4namespace Test.ViewModels 5{ 6 public class MainPageViewModel : ViewModelBase 7 { 8 // public なプロパティで使えるように public にする 9 public class TempSet 10 { 11 public ReactiveProperty<string> Label { get; set; } = new ReactiveProperty<string>(); 12 } 13 // public なプロパティにする 14 public TempSet FastSet { get; } = new TempSet(); 15 public ReactiveProperty<string> Label2 { get; set; } = new ReactiveProperty<string>(); 16 public MainPageViewModel(INavigationService navigationService) 17 : base(navigationService) 18 { 19 FastSet.Label.Value = "ラベル"; 20 Label2.Value = "ラベル2"; 21 } 22 } 23}

投稿2019/07/14 02:12

okazuki0130

総合スコア185

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

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

roamschemer

2019/07/14 02:15

おーありがとうございます。サンプルコードで動くようになりました。 なるほど、Viewから単純に見えない状態だったんですね。 これで既存のコードがすっきりしそうです。
guest

0

class TempSetTempSet FastSetにアクセス修飾子の指定がありません
アクセシビリティ レベル (C# リファレンス)
こちらの「メンバーの既定のアクセシビリティ」の項目がある表を見るとクラスメンバで省略した場合はprivateになると書いてありますので単純にViewのクラスからは見えないだけではありませんか?

投稿2019/07/13 23:38

編集2019/07/14 07:33
len_souko

総合スコア1348

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

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

roamschemer

2019/07/14 02:16

ありがとうございます。この辺どうもまだ完全に理解できていないようで苦労しております。 okazuki0130さんのサンプルで動きましたが、返答としては同じですよね。
len_souko

2019/07/14 07:45

リンクの貼り方を間違えていました リンク先を見てもらえばわかるかと思いますが、なぜ見えなかったのか、どうすればいいのかというのが分かるような解説が載っています okazuki0130さんのサンプルはそのうちの一般的な対応法となっています 同じプロジェクト(ビルドすると同じexeやdllファイルとして出力される)の中で使うだけならpublic以外にもinternalでも参照可能になります viewmodelがviewを実行する端末の種類(PC用とかAndroid用とか)ごとにプロジェクトを分けている場合はinternalでは参照不可となりますのでpublicとする必要があります C#の勉強をされる場合はMSの公式ドキュメントが分かりにくいというのであれば https://ufcpp.net/ こちらのサイトの上のメニューのC#から色々見ておくと分かりやすいかと思います バージョンアップによる変遷もわかりますので自分も分からない時にはこちらのサイトで確認することも多いです
roamschemer

2019/07/15 02:12

親切にありがとうございます。よく確認して理解を深めておこうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問