「Xamarin.MacでCocoa Bindingを使う」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
(Administrator がページ「Xamarin.Mac/Cocoa Bindingを使う」を「Xamarin.MacでCocoa Bindingを使う」に移動しました)
 
1行目: 1行目:
[[Interface Builder]]と[[ソースコード]]を連動させるCocoa Bindingの使い方を調査している。
+
[[Interface Builder]]と[[ソースコード]]を連動させる[[Cocoa Binding]]の使い方を調査している。
  
Xamarin.MacのBindingライブラリ(いわゆるP/Invokeみたいなもの)とは「バインディング」という名称はにているがまったくの別物である。
+
「[[Cocoa  Binding]]」は[[Xamarin.Mac]]の「Bindingライブラリ(いわゆる[[P/Invoke]]みたいなもの)」と名称が似ているがまったくの別物である。
  
 
==実装1==
 
==実装1==
53行目: 53行目:
  
 
==関連項目==
 
==関連項目==
 
+
* [[Xamarin.MacでのNSTableViewの使い方]]
==参考文献==
+
* [[Xamarin.MacでNSTextViewのスマートクォートを無効化する]]
{{reflist}}
 
 
 
{{stub}}
 
  
 
[[category:Xamarin.Mac]]
 
[[category:Xamarin.Mac]]
[[category:MonoMac]]
 

2020年2月14日 (金) 02:37時点における最新版

Interface Builderソースコードを連動させるCocoa Bindingの使い方を調査している。

Cocoa Binding」はXamarin.Macの「Bindingライブラリ(いわゆるP/Invokeみたいなもの)」と名称が似ているがまったくの別物である。

実装1[編集 | ソースを編集]

  1. バインディング用のプロパティを用意する。
  2. Export属性でInterface Builderから見た場合の名称を与える。
  3. WillChangeValueメソッドおよびDidChangeValueメソッドでプロパティの変更を伝える。

この例では配列を作るのが面倒だったのでAVFoundationのビデオ入力デバイス一覧を使っている。FaceTimeカメラなんかが列挙されるはず。

        AVCaptureDevice[] _videoDevices;

        [Export("videoDevices")]
        public AVCaptureDevice[] VideoDevices
        {
            get { return _videoDevices; }
            set
            {
                if (_videoDevices != value)
                {
                    WillChangeValue("videoDevices");
                    _videoDevices = value;
                    DidChangeValue("videoDevices");
                }
            }
        }

        public override void WindowDidLoad()
        {
            base.WindowDidLoad();
            this.VideoDevices = AVCaptureDevice.DevicesWithMediaType(AVMediaType.Video);
        }

Interface Builderを開きバインディングを設定する。

  1. Bindings Inspectorを開く
  2. Value Selection
    • Content
      • Bind to 「Files's Owner」を選びチェック
      • Model Key Path 「videoDevices」(Exportで指定したプロパティ名称)
      • null許容の場合は「Inserts Null Placeholder」にチェック
    • Content Values
      • Bind to 「Files's Owner」を選びチェック
      • Model Key Path 「videoDevices.localizedName」(Exportで指定したプロパティのプロパティが表示名となる)
    • null許容の場合は「Inserts Null Placeholder」にチェック

自動選択を使う場合は「Selected〜」系にも値を埋める。

備考1[編集 | ソースを編集]

Nullable型のプロパティはバインディングとして利用できない。実行時に落ちる。

DateTime? ReservedAt { get; set; }

関連項目[編集 | ソースを編集]