バインディングソースを別のCLRオブジェクトに変更する

rsgmon

これは主に好奇心からの質問であり、バインディング、XAML、および拡張構文をよりよく理解するのに役立つことを願っています。

したがって、バインディングソースをMainWindowからMainWindowでインスタンス化したオブジェクトに変更したいだけです。

これが私のC#コードです:

    public partial class MainWindow : Window, INotifyPropertyChanged
    {

        public MainWindow()
        {
            favclass myfavclass = new favclass();
            InitializeComponent();
            this.DataContext = this;
        }

        string _myString = "hello";
        public string MyString
        {
            get { return _myString; }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        void OnPropertyChanged(string propName)
        {
            if (this.PropertyChanged != null)
                this.PropertyChanged(
                    this, new PropertyChangedEventArgs(propName));
        }


    }

    public class favclass : INotifyPropertyChanged
    {
        int _myint = 34;
        public int MyInt
        {
            get { return _myint; }
            set { _myint = value; }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        void OnPropertyChanged(string propName)
        {
            if (this.PropertyChanged != null)
                this.PropertyChanged(
                    this, new PropertyChangedEventArgs(propName));
        }


    }


}

と私のXAML

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" >
    <Grid>
        <TextBlock Height="50" Width="50" Text="{Binding MyString}"/>
        <TextBlock Height="50" Width="48" Margin="200,100,100,100" 
                   Text="{Binding Source=myfavclass, Path=MyInt}"/>

    </Grid>
</Window>

ご覧のとおり、最初にメインウィンドウからMyStringプロパティを表示します。

次に、myfavclassオブジェクトからMyIntを表示します。しかしもちろん、MyIntは表示されません。考えられるすべてのバリエーションを試しました。

どのXAMLがありませんか?なぜ私が持っているXAMLが機能しないのですか?

ありがとう

キングキング

Source=myfavclassこれは間違っています。Source次のような要素構文を使用してのみ直接割り当てることができます

<Binding>
   <Binding.Source>
       <!-- value here -->
   </Binding.Source>
</Binding>

または、次のようなStaticResourceまたはDynamicResoureまたはカスタムを使用できますMarkupExtension

Text="{Binding Source={StaticResource someKey}, Path=MyInt}"

または、新機能{x:Reference}使用して、XAML内の名前付き要素への直接参照を取得します。

Text="{Binding Source={x:Reference someName}, Path=MyInt}"

さらに、myfavclassはコードビハインド内でローカル変数として宣言されています。XAMLコード内で使用(参照)できる方法はありません。

あなたは複数のビューモデルと呼ばれる何かをしています。その場合は、コントロールに複数のDataContextを提供する必要があります。ネストされたビューモデルを使用することを好みます。これを実装するには、次のMainWindowように変更してみてください

public partial class MainWindow : Window, INotifyPropertyChanged
{
    public MainWindow()
    {
        _myfavclass = new favclass();
        InitializeComponent();
        this.DataContext = this;
    }
    private readonly favclass _myfavclass;
    //we will use this property inside XAML code
    public favclass MyFavClass {
        get {
           return _myfavclass;
        }
    }
}

今、XAMLコードでは、あなたがにテキストをバインドできるMyFavClass.MyIntことを、ノートDataContextあなただけ指定する必要があるので、暗黙的に結合するためのソースですPath

<TextBlock Height="50" Width="48" Margin="200,100,100,100" 
               Text="{Binding Path=MyFavClass.MyInt}"/>

あなたMyIntはを使用して適切に実装されていませんINotifyPropertyChanged(しかし、あなたがすでにそれを知っていることを願っています)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

オブジェクトへのデータバインディング-データソースの変更をキャンセルする方法

分類Dev

ブール値(SwiftUI)に基づいてオブジェクトのバインディングソースを変更するにはどうすればよいですか?

分類Dev

Python 3でバイトオブジェクトのエンコーディングを変更するにはどうすればよいですか?

分類Dev

オブジェクトのスコープに空白のバインディングを作成する

分類Dev

オーディオオブジェクトのonerrorイベント内のグローバル変数にアクセスする方法

分類Dev

TypescriptIonicのデータバインディングにオブジェクト関数を公開する

分類Dev

パディングのあるFabricJsキャンバスオブジェクトはサイズ変更時に消えます

分類Dev

オブジェクトのキー値をインデックスに変更するajaxクエリ

分類Dev

Androidデータバインディングでオブジェクトのメソッドを使用するにはどうすればよいですか?

分類Dev

ファイルのリストを除いて、変更されたソースをオブジェクトディレクトリにコンパイルするようにmakefileを変更する方法

分類Dev

ジャクソンデータバインディング時にPojo名を参照するJsonオブジェクトを取得する方法

分類Dev

StackLayoutのインデックスを別のオブジェクトから変更する

分類Dev

オブジェクト指向プログラミングを使用せずに、tkinterでキャンバスオブジェクトのサイズをウィンドウサイズに変更するにはどうすればよいですか?

分類Dev

参照ポインタを別のオブジェクトに変更する方法

分類Dev

サブプロパティが変更されたときにオブジェクトバインディングを再評価する

分類Dev

元のデータを変更せずにVueのオブジェクトのリストをフィルタリングする

分類Dev

Javaはオブジェクトを返す/オブジェクトを変更する(コーディングガイドライン)

分類Dev

nodejsネイティブアドオン:別のネイティブアドオンに含まれるc ++オブジェクトのメンバーの値を変更する方法

分類Dev

日時のオブジェクト「日付」を別のオブジェクトの「日付」に変更する方法は? (パイソン)

分類Dev

ngModelのオブジェクトキーに対するngForのオブジェクトプロパティの双方向データバインディング

分類Dev

デバイススウィフトの向きに基づいてオブジェクトのフォント、スタイルなどを変更します

分類Dev

メソッドを変数に格納してから呼び出すと、コンテキストオブジェクトがグローバルウィンドウオブジェクトに変わるのはなぜですか?

分類Dev

データベーステーブルを表示および変更するためにプロパティオブジェクトのリストにバインドされたコード名1つのテーブル

分類Dev

F#はクラス内の不変のバインディングを更新できますか(指定されたバインディングを変更して新しいオブジェクトを作成しますか?)

分類Dev

オブジェクトの変更をバインドするときにビューを更新する

分類Dev

テンソルフローからオブジェクト検出用のバウンディングボックスの座標を選択する方法

分類Dev

ジャクソンのカスタム基準を満たす条件付きでスキップするオブジェクトをシリアライズするときにHTTPコードを変更する(スプリングブート)

分類Dev

カスタムコンポーネントディレクティブをforループ内のオブジェクトにバインドする

分類Dev

特定のインデックスによるリアクティブ状態の更新は、配列をオブジェクトに変更します

Related 関連記事

  1. 1

    オブジェクトへのデータバインディング-データソースの変更をキャンセルする方法

  2. 2

    ブール値(SwiftUI)に基づいてオブジェクトのバインディングソースを変更するにはどうすればよいですか?

  3. 3

    Python 3でバイトオブジェクトのエンコーディングを変更するにはどうすればよいですか?

  4. 4

    オブジェクトのスコープに空白のバインディングを作成する

  5. 5

    オーディオオブジェクトのonerrorイベント内のグローバル変数にアクセスする方法

  6. 6

    TypescriptIonicのデータバインディングにオブジェクト関数を公開する

  7. 7

    パディングのあるFabricJsキャンバスオブジェクトはサイズ変更時に消えます

  8. 8

    オブジェクトのキー値をインデックスに変更するajaxクエリ

  9. 9

    Androidデータバインディングでオブジェクトのメソッドを使用するにはどうすればよいですか?

  10. 10

    ファイルのリストを除いて、変更されたソースをオブジェクトディレクトリにコンパイルするようにmakefileを変更する方法

  11. 11

    ジャクソンデータバインディング時にPojo名を参照するJsonオブジェクトを取得する方法

  12. 12

    StackLayoutのインデックスを別のオブジェクトから変更する

  13. 13

    オブジェクト指向プログラミングを使用せずに、tkinterでキャンバスオブジェクトのサイズをウィンドウサイズに変更するにはどうすればよいですか?

  14. 14

    参照ポインタを別のオブジェクトに変更する方法

  15. 15

    サブプロパティが変更されたときにオブジェクトバインディングを再評価する

  16. 16

    元のデータを変更せずにVueのオブジェクトのリストをフィルタリングする

  17. 17

    Javaはオブジェクトを返す/オブジェクトを変更する(コーディングガイドライン)

  18. 18

    nodejsネイティブアドオン:別のネイティブアドオンに含まれるc ++オブジェクトのメンバーの値を変更する方法

  19. 19

    日時のオブジェクト「日付」を別のオブジェクトの「日付」に変更する方法は? (パイソン)

  20. 20

    ngModelのオブジェクトキーに対するngForのオブジェクトプロパティの双方向データバインディング

  21. 21

    デバイススウィフトの向きに基づいてオブジェクトのフォント、スタイルなどを変更します

  22. 22

    メソッドを変数に格納してから呼び出すと、コンテキストオブジェクトがグローバルウィンドウオブジェクトに変わるのはなぜですか?

  23. 23

    データベーステーブルを表示および変更するためにプロパティオブジェクトのリストにバインドされたコード名1つのテーブル

  24. 24

    F#はクラス内の不変のバインディングを更新できますか(指定されたバインディングを変更して新しいオブジェクトを作成しますか?)

  25. 25

    オブジェクトの変更をバインドするときにビューを更新する

  26. 26

    テンソルフローからオブジェクト検出用のバウンディングボックスの座標を選択する方法

  27. 27

    ジャクソンのカスタム基準を満たす条件付きでスキップするオブジェクトをシリアライズするときにHTTPコードを変更する(スプリングブート)

  28. 28

    カスタムコンポーネントディレクティブをforループ内のオブジェクトにバインドする

  29. 29

    特定のインデックスによるリアクティブ状態の更新は、配列をオブジェクトに変更します

ホットタグ

アーカイブ