Beta 2 で挙動が変わったところ。その2
自分のプロパティを自分のコントロールのプロパティにデータバインドしたいことがよくあるのです。
で、 Beta 1 のときは下みたいに DataContext に自身のインスタンスを放り込んでました。
<TextBlock Text="{Binding Title}" />
//コンストラクターとかで・・・ this.DataContext = this; public string Title { get{return (string)this.GetValue(TitleProperty);} set{this.SetValue(TitleProperty,value);} }
Beta 2 になったら、この this.DataContext = this のところで StackOveflowException が出るようになりました。むぅ・・。
たぶん Visual Tree にのっかてる、自分もしくは自分より親のインスタンスが設定されるとダメな様な気がします。全然未検証なので自分の子供で駄目かもしれませんし、そもそも Visual Tree にのっかってたら駄目かもしれませんが。
このときのいい回避方法や変更方法はまだ思いついてません。どうしようかなぁ。。
WPF みたいに Binding に ElementName があったら以下のようにするんですが。っていうか、WPF の場合は以下のようにしてたのですが。
<UserControl x:Name="root" ・・・ ・・・ <TextBlock Text="{Binding Title,ElementName=root}" />
はやく Silverlight の Binding にも ElementName がのっからないですかねぇ。