Как простой пример, у меня есть кнопка в словаре ресурсов, которую я буду хранить в ContentControl. Мне нужно привязать свойство Видимости Button к флажку, расположенному на странице, но кнопка создана до, поэтому мой сеттер не будет работать.Late Binding, или доступ к элементу страницы из его ресурсного словаря
Есть ли способ сделать привязку привязки после инициализации страницы? Я знаю, что могу сделать это из кода позади, но у меня будет много кнопок, и кажется довольно беспорядочным иметь части кода инициализации кнопок в разных местах.
<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);
}
}
Любые идеи?
Я попробовал ваш код и он работает отлично (кроме того, что ваш код есть компилировать вопросы, которые должны были быть исправлены). Что происходит, когда вы пытаетесь запустить его? –