2011-02-06 7 views
1

私はWindows Phone 7 Appをビルドしています。だから、私はSilverLight 3(.7)を使用しており、私が構築したUserControlsには少し問題があります。WP7 UserControlでデータバインディングを行う正しい方法

<MyUserControl Number="{Binding ElementName=MyPage, Path=SomeNumber}"> 
<MyUserControl Number="{Binding ElementName=MyPage, Path=SomeOtherNumber}"> 

このすべてが素晴らしい作品が、私の場合は:

ユーザーコントロールは、私は単純にやっている、それを使用するには数

<UserControl x:Class="MyUserControl" x:Name="myUserControl"> 
    <TextBlock Text="{Binding ElementName=myUserControl, Path=Number}"/> 
</UserControl> 

をするDependencyPropertyを指名した。ここで私は今それをやっている方法です私のコントロールの2つのインスタンスのうちの1つに名前を追加すると、何か変なことになります。例:

<MyUserControl x:Name="SomeNumberControl" 
       Number="{Binding ElementName=MyPage, Path=SomeNumber}"> 
<MyUserControl Number="{Binding ElementName=MyPage, Path=SomeOtherNumber}">` 

次にデータは表示されません。指定された名前がUserControlで指定された名前をオーバーライドし、バインディングが機能しないようです。

私はdatacontextでバインドしようとしました。また、DataContextをUserControlに設定します。

ので、私のコントロールはなった:バインドされます。この何もない

<UserControl x:Class="MyUserControl" 
      DataContext="{Binding RelativeSource={RelativeSource Self}}"> 
    <TextBlock Text="{Binding Number}"/> 
</UserControl> 

。これは、datacontextが決して設定されていない、私が作成した別のユーザコントロールにこのコントロールを置くと奇妙なものでもあります。親コントロールが何らかの形でMyUserControlインスタンスにバインドされているようです。

だから私は、次の操作を実行したとき:

<MyPage> 
    <MyUserControl Number={Binding SomeNumber}"/> 

私はエラーを取得し、

SomeNumber型MyUserControlには見られません。

親コントロールのバインディングがMyUserControlのインスタンスになっているかのようです。私はユーザーコントロールのバインディングをどうやって基本的に間違っているのか、それともSilverLight 4とWP7では何か変わったことですか?

これに関するお手伝いをさせていただきます。

+0

こんにちはマイケル、 あなたのポストをありがとう、私は** **同じ正確な問題に実行しています。私は私のusercontrolにx:Nameを与えると、データバインディングは機能しなくなります。 は残念ながら、私はあなたが手の込んだてもらえ **あなたは**私はすべての参照と命名されるように参照を変更し、それが機能するようになりましたことにより、何を意味するか理解しません。 ありがとう:) –

+0

'DataContext =" {バインディングRelativeSource = {RelativeSource Self}} "はコードの匂いです。 – Will

答えて

0

あなたがナンバーと呼ばれるあなたの分離コードでDependecyPropertyを持っている場合は、あなたがのTextBlockからあなたのNumberプロパティに直接結合できるようにする必要があり

DataContext = this; 

を設定することができます。

<TextBlock Text="{Binding Number}"/> 
+0

ええ、私もそれを試みました。同じこと、それは私がXAMLまたはC#のいずれかにバインドしていることを無視しているようです。 –

+0

拘束力のある例外はありますか(出力ウィンドウを確認してください)。 – thomasmartinsen

+0

私はそれを理解したかもしれないと思います。私はバインディングを行うためにさまざまな場所でDataContextを使用していました。私はUserControlを使用していて、ウィンドウではないので、インスタンス化されたページやウィンドウの表示ツリーの一部であり、datacontextを継承します。 datacontextを上書きすることができます。特にコンストラクタで設定した場合は上書きできます。私はすべての参照を名前付き参照に変更し、現在は動作します。 –

関連する問題