単純な例として、ResourceControlに保存するリソースディクショナリにボタンがあります。ボタンのVisibilityプロパティをページにあるチェックボックスにバインドする必要がありますが、ボタンがの前に作成されています。の前に、私のセッターは機能しません。レイトバインディング、またはリソースディクショナリからページ要素にアクセスする
ページが初期化された後にバインドバインドを作成する方法はありますか?私はコードの背後からそれを行うことができますが、私はたくさんのボタンを持っています、そしてボタンの初期化コードの部分を別々の場所に持つのは面倒です。
<ResourceDictionary>
<button x:Key = "MyButton">Hi There
<button.Style>
<Style>
<Setter Property="IsVisible" Value="false"/>
<DataTrigger // myCheckBox doesn't exist yet...
Binding="{Binding ElementName=myCheckBox, Path=IsChecked}" Value="True">
<Setter Property="IsVisible" Value="true"/>
<DataTrigger/>
</Style>
</button.Style>
</button>
</ResourceDictionary>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<CheckBox x:Name = "myCheckBox" Row=1/> //This is made too late to bind my button to
<ContentControl Content = "{StaticResource MyButton}" Row=2/>
</Grid>
私はあなたがそれらを必要とするときにオブジェクトをロードlazy loading、のようなものを見つけた、と私はmaking my own binding classを調査してきましたが、私はちょうどそれをどこに行くか分かりません。
私の現在のお気に入りのアイデアは、何かのようである:
XAML:
property="{lateBinding source=whatever path=you.want}"
といくつかの一般的なC#クラスコード:
class lateBinding : Binding
{
OnPageInitialized()
{
SetBinding(myObject, myProperty, myBinding);
}
}
任意のアイデア?
で動作します(あなたのコードを修正する必要があった問題をコンパイルしていたという事実以外の)私はあなたのコードを試してみましたが、それが正常に動作します。あなたがそれを実行しようとするとどうなりますか? –