1

オブジェクトのリストにバインドされたListViewがあります。ListViewでアイテムを選択すると、SelectionChangedイベントがキャッチされ、選択したオブジェクトが詳細ビューに渡されます。

protected void list_selectionChanged(object sender, SelectionChangedEventArgs e) {
    var myObject = theList.SelectedItem as MyObjectType;

    detailsView.DataContext = myObject;
}

detailsViewは、ListViewと同じWPFのUserControlです。次のようなXAMLが含まれています。

<Label Content="{Binding Path=deviceId}"></Label>
<l:MyUc deviceId="{Binding Path=deviceId}" />

MyUC内に、DependencyPropertyが定義されています。

public static readonly DependencyProperty deviceIdProperty = DependencyProperty.Register("deviceId", typeof(Guid), typeof(MyUC), new FrameworkPropertyMetadata(null));

public Guid deviceId {
    get { return (Guid)GetValue(deviceIdProperty); }
    set { SetValue(deviceIdProperty, value); }
}

ラベルにはdeviceIdが表示されますが、MyUC内のプロパティが設定されることはありません。

誰かが私の間違いを見つけることができますか?

4

2 に答える 2

3

XAMLで依存関係プロパティを使用する場合、setメソッドが呼び出されることはありません。このセットを「表示」する場合は、プロパティ変更コールバックを追加する必要があります。これは、バインディングメカニズムが、セッターなしで依存関係プロパティを直接設定するためです。

これを実装する方法の詳細については、MSDNの「PropertyChangedコールバック」セクションを参照してください。

于 2013-01-25T18:37:13.580 に答える
0

まず、ListViewとそのプロパティを定義する実際のXAMLコードを追加できると便利です。

次に、(もちろんVisual Studioデバッグセッションで)出力コンソールを確認し、定義したバインディングに関してバインディングエラーがあるかどうかを確認する必要があります。

バインディングがdeviceId依存関係プロパティタイプに適合しない値を提供する可能性が非常に高いため、変更されることはありません。

于 2013-01-25T18:56:02.377 に答える