<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://monobook.org/w/index.php?action=history&amp;feed=atom&amp;title=ReactiveUI%2FXamarin.Mac%E3%81%AENSTextField%E3%81%AB%E3%83%90%E3%82%A4%E3%83%B3%E3%83%89%E3%81%99%E3%82%8B</id>
	<title>ReactiveUI/Xamarin.MacのNSTextFieldにバインドする - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://monobook.org/w/index.php?action=history&amp;feed=atom&amp;title=ReactiveUI%2FXamarin.Mac%E3%81%AENSTextField%E3%81%AB%E3%83%90%E3%82%A4%E3%83%B3%E3%83%89%E3%81%99%E3%82%8B"/>
	<link rel="alternate" type="text/html" href="https://monobook.org/w/index.php?title=ReactiveUI/Xamarin.Mac%E3%81%AENSTextField%E3%81%AB%E3%83%90%E3%82%A4%E3%83%B3%E3%83%89%E3%81%99%E3%82%8B&amp;action=history"/>
	<updated>2026-06-04T15:51:54Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://monobook.org/w/index.php?title=ReactiveUI/Xamarin.Mac%E3%81%AENSTextField%E3%81%AB%E3%83%90%E3%82%A4%E3%83%B3%E3%83%89%E3%81%99%E3%82%8B&amp;diff=6882&amp;oldid=prev</id>
		<title>153.220.119.198: ページの作成:「ReactiveUIのビューモデルをXamarin.MacのNSTextFieldにバインドする場合には一筋縄ではいなかいようだ。 単純にReactiveWindowController...」</title>
		<link rel="alternate" type="text/html" href="https://monobook.org/w/index.php?title=ReactiveUI/Xamarin.Mac%E3%81%AENSTextField%E3%81%AB%E3%83%90%E3%82%A4%E3%83%B3%E3%83%89%E3%81%99%E3%82%8B&amp;diff=6882&amp;oldid=prev"/>
		<updated>2015-03-09T11:14:35Z</updated>

		<summary type="html">&lt;p&gt;ページの作成:「ReactiveUIのビューモデルを&lt;a href=&quot;/wiki/Xamarin.Mac&quot; class=&quot;mw-redirect&quot; title=&quot;Xamarin.Mac&quot;&gt;Xamarin.Mac&lt;/a&gt;のNSTextFieldにバインドする場合には一筋縄ではいなかいようだ。 単純にReactiveWindowController...」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;ReactiveUIのビューモデルを[[Xamarin.Mac]]のNSTextFieldにバインドする場合には一筋縄ではいなかいようだ。&lt;br /&gt;
単純にReactiveWindowControllerクラスのBindメソッドやOneWayBindメソッドでバインドしただけではまったく反応してくれなくて困った。&lt;br /&gt;
そんな中[[キーボード]]を強打しながら[[GitHub]]を徘徊していたところ見事に解決策を発見した&amp;lt;ref&amp;gt;https://github.com/reactiveui/RxUI_QCon/blob/master/RxUI_QCon.Cocoa/MainWindowController.cs&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
    using System;&lt;br /&gt;
    using System.ComponentModel;&lt;br /&gt;
    using System.Reactive;&lt;br /&gt;
    using System.Reactive.Concurrency;&lt;br /&gt;
    using System.Reactive.Linq;&lt;br /&gt;
    using System.Reactive.Subjects;&lt;br /&gt;
    using Foundation;&lt;br /&gt;
    using AppKit;&lt;br /&gt;
    using ReactiveUI;&lt;br /&gt;
&lt;br /&gt;
    public partial class MainWindowController : ReactiveWindowController, IViewFor&amp;lt;MainViewModel&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        // 〜〜〜中略〜〜〜&lt;br /&gt;
&lt;br /&gt;
        MainViewModel _viewModel;&lt;br /&gt;
&lt;br /&gt;
        public MainViewModel ViewModel { &lt;br /&gt;
            get { return _viewModel; }&lt;br /&gt;
            set { this.RaiseAndSetIfChanged(ref _viewModel, value); }&lt;br /&gt;
        }&lt;br /&gt;
            &lt;br /&gt;
        object IViewFor.ViewModel&lt;br /&gt;
        {&lt;br /&gt;
            get { return ViewModel; }&lt;br /&gt;
            set { ViewModel = (MainViewModel)value; }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // 〜〜〜ここまではよくある定型〜〜〜&lt;br /&gt;
&lt;br /&gt;
        IObservable&amp;lt;Unit&amp;gt; hookTextField(NSTextField textField)&lt;br /&gt;
        {&lt;br /&gt;
            var ret = new Subject&amp;lt;Unit&amp;gt;();&lt;br /&gt;
            textField.Delegate = new BlockDidChangeTextFieldDelegate(() =&amp;gt; ret.OnNext(Unit.Default));&lt;br /&gt;
            return ret;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        class BlockDidChangeTextFieldDelegate : NSTextFieldDelegate&lt;br /&gt;
        {&lt;br /&gt;
            Action block;&lt;br /&gt;
            public BlockDidChangeTextFieldDelegate(Action block) { this.block = block; }&lt;br /&gt;
            public override void Changed(NSNotification notification) { block(); }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public override void WindowDidLoad()&lt;br /&gt;
        {&lt;br /&gt;
            base.WindowDidLoad();&lt;br /&gt;
&lt;br /&gt;
            // ---- バインド ----&lt;br /&gt;
&lt;br /&gt;
            // よくあるこの記法では動かない&lt;br /&gt;
            //this.Bind(ViewModel, vm =&amp;gt; vm.FirstName, v =&amp;gt; v.FirstName.StringValue);&lt;br /&gt;
&lt;br /&gt;
            // hookTextFieldが重要だった&lt;br /&gt;
            this.Bind(ViewModel, vm =&amp;gt; vm.FirstName, v =&amp;gt; v.FirstName.StringValue, hookTextField(FirstName));&lt;br /&gt;
            this.Bind(ViewModel, vm =&amp;gt; vm.LastName , v =&amp;gt; v.LastName.StringValue , hookTextField(LastName));&lt;br /&gt;
            this.OneWayBind(ViewModel, vm =&amp;gt; vm.FullName, v =&amp;gt; v.FullName.StringValue);&lt;br /&gt;
&lt;br /&gt;
            // ---- ビューモデル生成 ----&lt;br /&gt;
            ViewModel = new MainViewModel();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
なお、このサンプルのビューモデルには「[[ReactiveUI/ViewModelを作る#WhenAny]]」にあるものを使っている。&lt;br /&gt;
&lt;br /&gt;
==関連項目==&lt;br /&gt;
*[[ReactiveUI]]&lt;br /&gt;
&lt;br /&gt;
==参考文献==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;/div&gt;</summary>
		<author><name>153.220.119.198</name></author>
	</entry>
</feed>