2011-08-12 10 views
2

"CarSystemWindow"というプロジェクトでカスタムコントロールクラスがあります。これはWindowから降りて、アプリケーション内のすべてのウィンドウに同じ外観を与えるカスタムテンプレートを持っています。また、DeviceNameおよびDeviceTypeという名前の2つの依存プロパティも定義します。これらは文字列型です。デフォルトではそれぞれ「Vehicle:」と「Car 54」に設定されています。WPFバインドウィンドウのプロパティに失敗する

私のメインプログラムでは、データベースからView Modelオブジェクトに行を取得し、プログラムの初期化中にSiteという通常のCLRプロパティに保存します。メインウィンドウのXAMLで、私は次のコードを持っている:私はこの同じ結合コードを使用してい

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Window', AncestorLevel='1''. BindingExpression:Path=Site; DataItem=null; target element is 'MainWindow' (Name=''); target property is 'DataContext' (type 'Object') 

:実行時に

<cs:CarSystemWindow x:Class="....MainWindow" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:c="clr-namespace:..." 
        xmlns:cs="..." 
        Background="Black" 
        Closed="Window_Closed" 
        DataContext="{Binding Path=Site, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" 
        DeviceName="{Binding Path=SiteName}" 
        DeviceType="{Binding Path=SiteTypeName}" 
        Icon="..." 
        Height="600" 
        Loaded="Window_Loaded" 
        ResizeMode="CanMinimize" 
        SourceInitialized="Window_SourceInitialized" 
        Title="Window Title" 
        Width="800" 
        WindowStartupLocation="CenterScreen"> 

を、DataContextの属性にバインディングは、次のようなメッセージで失敗しています他の場所で動作します。私はSiteプロパティを依存関係プロパティにしても、まだ失敗しています。

バインディングに失敗した理由を知っている人はいますか?

おかげ

トニー

+0

あなたは「サイト」プロパティが背後にあるこの窓コードで定義されている意味しますか? – bic

答えて

8

私はあなたがこれにバインディングを変更する必要があると思う:

{Binding RelativeSource={RelativeSource Self}, Path=Site} 

あなたの現在のバインディングが動作していない理由は、あなたが実際にウィンドウから階層内のレベルを上に移動しようとしますが、されていることですウィンドウが必要です。ここで

は結合文字列が異なるシナリオのためにどうあるべきかを考え出すための良い情報源です:

http://www.nbdtech.com/Free/WpfBinding.pdf

+0

ちょっと!私はそれを入力していた:-)。代わりに、コンストラクタにDataContextを設定して同じ結果を得ることもできます。 – bic

+0

ありがとうございました!私はあなたの紐を使用し、それは動作します。 –

+1

@トニー、ところで、ここにあなたのバインディングシナリオのすべての良いソースがあります:http://www.nbdtech.com/Free/WpfBinding.pdf – devuxer

0

結合DataContextに問題が行はこのオブジェクトの先祖であるオブジェクトにSiteプロパティを使用するように言って、そしてタイプWindowでされていることです。このオブジェクトはすでにWindowであるため、ビジュアルツリーのルートには、検索して指定されたプロパティを見つける祖先はありません。

DataContextをこのオブジェクトが作成される場所に割り当てないのはなぜですか?

+0

私はあなたが言っていることを見ている。コード内でDataContextにオブジェクトを割り当てることができましたが、Xamlでそれをやりたかったのです。 –

関連する問題