双方向データバインド

Posted by muchag | C# |
初回投稿:2018-02-11 (日) 12:21:07 | 最終更新:2019-12-17 (火) 21:18:59

【環境】
.NET Framwork: 4.5
Visual Studio: 2019C 16.4.1
前提

今回は、VB 案件で試したので、VB で。

本体プロジェクト(Windows フォームアプリ)とは別に
ユーザコントロール用クラスライブラリプロジェクトを作成。
(以下、コントロールプロジェクト)

手順
コントロールデザイン

コントロールプロジェクトを新規作成。

デフォルトで用意されたファイルに、テキストボックスなどを配置。

データバインディング用クラスを作成

Public Class ProfileEntity
    Public Property FirstName() As String = ""
    Public Property FamilyName() As String = ""
    Public Property Age() As Integer = 0
    Public Property Gender() As Integer = 0
End Class

そして、性別ラジオボタンのデータバインディングをどうすればよいか
と考えたら、全然思いつかなかった。

Google 先生にも質問してみたけど
ドンピシャの回答は得られなかった。

今後の課題。

バインディング
  1. [データソース] ビューで、[新しいデータソースの追加]
  2. 「データソースの種類の選択」ダイアログ
    1. [オブジェクト] を選択
    2. [次へ]
  3. 「データ オブジェクトの選択」ダイアログ
    1. ツリーを開いて、対象オブジェクトにチェック
    2. [完了]
  4. コントロールデザインへ、DataSource コントロールを配置
    1. DataSource コントロールの DataSource プロパティから
      1. [他のデータソース]-[プロジェクト データソース]-[(先程登録したオブジェクト)]
  5. フォーム上の各コントロールの (DataBindings) の対象プロパティへ、オブジェクトプロパティをバインディング
    1. ComboBox:SelectedValue プロパティ?
    2. TextBox:Text プロパティ
  6. ソースへデータオブジェクトのインスタンスを、DataSource へ設定するメソッドを追加

Public Sub SetDataSource(ByVal profile As ProfileEntity)
    Me.DataSource1.DataSource = profile
End Sub

試行錯誤に書いた通り、DataSource プロパティを外から設定することはできない。

フォーム利用
  1. コントロールプロジェクトをビルド
  2. 本体プロジェクトを新規作成
  3. 本体プロジェクト内の [参照] のコンテキストメニューから [参照の追加]
  4. 「参照マネージャー」ダイアログ
    1. [参照] から、コントロールプロジェクトの .dll を選択
  5. コントロール追加 の手順でツールボックスへ自作コントロールを追加
  6. 自作コントロールを、ツールボックスからフォームへ D&D
参考サイト

MSDN:とあるコンサルタントのつぶやき Part 1. 双方向データバインドの基本的な使い方(2009-02-26)
→とてもわかりやすい解説

@IT:WPF/UWP:ラジオボタンを双方向バインディングするには?[C#/VB](2016-02-03)
→ラジオボタンにおける双方向データバインド

試行錯誤
ユーザコントロールクラスを作成

UserControl クラスを継承するのに、下記のように書いたら

ステートメントの終わりを指定してください。

と怒られた。


Public Class ProfileControl Inherits UserControl

End Class

これが正解。


Public Class ProfileControl
    Inherits UserControl

End Class
データバインディング用クラスを作成
メンバ変数

メンバ変数ではダメ。

これでは、データバインディングのときに
選択肢として出てこなかった。

Public Class ProfileEntity
    Public FirstName As String = ""
End Class
古い記述

プロパティとして宣言すれば問題なかった。

けど、これは古い書き方らしい。


Public Class ProfileEntity
    Private _firstName As String = ""
    Public Property FirstName() As String
        Get
            Return _firstName
        End Get
        Set(value As String)
            _firstName = value
        End Set
    End Property
End Class
DataSource 設定

コントロールを利用するフォーム側で DataSource を設定しようとしたら
できなかった。

なので、コントロール側に、DataSource を設定するメソッドを追加した。

Posted by muchag | C# |
初回投稿:2018-02-11 (日) 12:21:07 | 最終更新:2019-12-17 (火) 21:18:59

コメントはまだありません »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment