1

私は私のクラスを持っています:

public class CustomCell
{
    public string BindingData
    {
        get { return (string)GetValue(BindingDataProperty); }
        set { SetValue(BindingDataProperty, value); }
    }

    public static readonly DependencyProperty BindingDataProperty =
        DependencyProperty.Register("BindingData", typeof(string), typeof(CustomCell));
}

BindingDataProperty でバインディングを設定します

CustomCell cell = new CustomCell();
cell.SetBinding(CustomCell.BindingDataProperty, new Binding("source"));

そして今、次を使用して XAML に相当する文字列を取得したいと思いますXamlWriter

string xaml = XamlWriter.Save(cell);

しかし、xaml文字列BindingDataには{x:Null}あり、バインディングは行われません。

なんで?どうすればこの問題を解決できますか?

4

1 に答える 1

1

これはXamlWriter.Saveのシリアル化の制限です

MSDNのドキュメントを参照してください。

StaticResourceやBindingなどのさまざまなマークアップ拡張形式によって作成されたオブジェクトへの一般的な参照、シリアル化プロセスによって逆参照されます。これらは、メモリ内オブジェクトがアプリケーションランタイムによって作成された時点ですでに逆参照されており、保存ロジックは元のXAMLに再度アクセスして、シリアル化された出力へのそのような参照を復元しません。これにより、データバインドされた値またはリソースで取得された値が、ランタイム表現で最後に使用された値になる可能性があります。このような値をローカルで設定された他の値と区別する機能は、制限されているか間接的です。画像は、元のソース参照としてではなく、プロジェクトに存在する画像へのオブジェクト参照としてもシリアル化され、最初に参照されたファイル名またはURIはすべて失われます。同じページ内で宣言されたリソースでさえ、それらが参照されたポイントにシリアル化されているように見えます。

于 2012-10-10T20:16:28.397 に答える