2010-10-26 3 views
0

У меня есть простой текстовый блок с меткой и текстовым полем как контент. Я хотел бы привязать свойство IsEnabled текстового блока к свойству в моей модели представления. По какой-либо причине ярлык и текстовое поле остаются отключенными, даже если свойство IsEnabled корректно изменяется на модели представления.Что случилось с привязкой TextBlock IsEnabled?

Кто-нибудь знает, что здесь происходит?

Это не работает:

<TextBlock IsEnabled="{Binding Path=IsEnabledProperty}"> 
    <Label Content="Test"/> 
    <TextBox Text="blah"/> 
</TextBlock> 

Это работает просто отлично:

<TextBlock> 
    <Label IsEnabled="{Binding Path=IsEnabledProperty}" Content="Test"/> 
    <TextBox IsEnabled="{Binding Path=IsEnabledProperty}" Text="blah"/> 
</TextBlock> 

Является ли это просто плохая идея использовать TextBlock, как это?

ответ

4

Да, это плохая идея. Когда вы размещаете нестроковые объекты в свойстве Text, они используются как элементы контента, например, в FlowDocument, и поэтому не являются интерактивными, как обычные FrameworkElements.

1

Вы попробовали StackPanel вместо этого?

<StackPanel Orientation="Horizontal" IsEnabled="{Binding Path=IsEnabledProperty}"> 
    <Label Content="Test"/> 
    <TextBox Text="blah"/> 
    </StackPanel> 

Является ли ваше свойство IsEnabledProperty зависимым?

+0

Да. Панель стоек - правильный путь. Я не уверен, где я видел, как TextBlock использовался таким образом изначально !? Время сломать дурную привычку. –

0

Вы уверены, что при обновлении его в viewModel вы активируете событие PropertyChanged для своей собственности IsEnableProperty?