0

アイテムを に追加するだけで自動的に表示されるため、 and を使用して WPF アプリケーションを作成しました。たとえば、コレクション内のオブジェクトをラップパネルの画面上のボックスとして表示し、各ボックスObservableCollectionにその.Dependency PropertiesObservableCollectionTitle

そのため、各項目Titleにプレフィックスまたはサフィックスを追加するだけでなく、Dependency Object プロパティが使用されていないように見えるようにしたいと考えました。ブレークポイントを設定できますが、到達することはありません。

送信プロパティにテキストを追加すると、そのテキストが表示されない理由を教えてもらえますか? 値は実際には「オブジェクトではなくWPFに保存されている」と読みましたが、それが何を意味するのかわかりません。

このテキストが表示されないテキストが依存オブジェクトによって出力されないのはなぜですか?

public class ApplicationItem : DependencyObject
{

    public string Title
    {
        get
        {
            return (string)GetValue("this text will NOT be seen: " + TitleProperty);
        }
        set
        {
            SetValue(TitleProperty, "this text will be seen: " + value);
        }
    }
}
4

2 に答える 2

2

TitleProperty は通常のプロパティではなく、依存関係プロパティであるため、TitleProperty の値を取得する場合は、次のようにする必要があります。

var title = (string)GetValue(TitleProperty);

WPF ガイドラインでは、依存関係プロパティにアクセスするためのパブリック プロパティは、WPF およびバインディング エンジンによって呼び出されません (必要ありません)。このパブリック プロパティは、コード ビハインドでのみ使用されます。したがって、パブリック プロパティ内にコード ロジックを追加してはなりません。

ただし、DP を登録するときに FrameworkPropertyMetadata を使用し、CoerceValueCallback を指定して設定値を変更できます。

バインディングで IValueConverter を使用することもできます。

于 2009-02-09T13:42:18.210 に答える
0

私はこれを私のために働かせました:

public string Title
{
    get 
    { 
        string value = (string)GetValue(TitleProperty); 
        return value + " postfix";
    }
    set 
    { 
        SetValue(TitleProperty, "Prefix " + value); 
    }
}

値が設定されているときに値を変更するのではなく、値を取得するときに値を変更しようとしている理由はありますか?

于 2009-02-09T14:23:35.957 に答える