2015-01-08 3 views
0

У меня есть объект TreeView, привязанный к DataSet. Внутри TreeView.ItemTemplate я использую HierarchicalDataTemplate, содержащий элементы управления, которые я выполняю.Binding BooleanToVisibilityConverter для элемента управления в TreeView HierarchicalDataTemplate

Кто-нибудь знает, как изменить свойство видимости элемента управления внутри HierarchicalDataTemplate? Я попытался использовать BooleanToVisibilityConverter из платформы .NET, но не могу заставить привязку работать правильно.

Логическая переменная в моей модели ViewModel с именем «moveButtonVisibility» привязана к свойству «Видимость» кнопки в моем XAML. Затем BooleanToVisibilityConverter пытается преобразовать соответствующее логическое значение (true/false) в значение Видимость (видимое/скрытое). "moveButtonVisibility" не является частью ItemSource TreeView.

Упомянутая ниже версия моего кода показана ниже. Я удалил весь код в моем XAML для управления Button "MoveHereButton", что я хочу, чтобы изменить свойство видимости на исключении:

ViewModel (C#):

private bool _moveButtonVisibility; 
public bool moveButtonVisibility 
{ 
    get { return _moveButtonVisibility; } 
    set 
    { 
     _moveButtonVisibility = value; 
     RaiseChange("moveButtonVisibility"); 
    } 
} 

VIEW (XAML):

<Page> 
    <Page.Resources> 
     <BooleanToVisibilityConverter x:Key="visibilityConverter"/> 
    </Page.Resources> 
    <Grid HorizontalAlignment="Center" VerticalAlignment="Top"> 
     <TreeView HorizontalAlignment="Center" x:Name="treeView1" VerticalAlignment="Top" ItemsSource="{Binding Path=rsParentChild}" Background="Transparent" BorderThickness="0" BorderBrush="Transparent" > 
      <TreeView.ItemContainerStyle> 
       <Style> 
        <Setter Property="TreeViewItem.IsExpanded" Value="True"/> 
       </Style> 
      </TreeView.ItemContainerStyle> 
      <TreeView.ItemTemplate> 
       <HierarchicalDataTemplate ItemsSource="{Binding Path=rsParentChild, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> 
         <Grid Focusable="False" Margin="5,10,5,10"> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="1*"/> 
          </Grid.ColumnDefinitions> 
          <Grid.RowDefinitions> 
           <RowDefinition/> 
          </Grid.RowDefinitions> 
          <Button Name="MoveHereButton" Content="Move Here" Visibility="{Binding DataContext.moveButtonVisibility, Converter={StaticResource visibilityConverter}}" Click="MoveHereButton_Click" /> 
         </Grid> 
       </HierarchicalDataTemplate> 
      </TreeView.ItemTemplate> 
     </TreeView> 
    </Grid> 
</Page> 
+0

* Кто-нибудь знает, как изменить свойство видимости элемента управления внутри HierarchicalDataTemplate? * ... да ... вы делаете это так же, как и с любым другим элементом управления. Проверьте свое 'Binding', добавив' TextBlock' следующим образом: ' Sheridan

+0

Кажется, это не так прямо. Я получаю следующую ошибку: System. Ошибка в Windows.Data: 40: Ошибка пути BindingExpression: свойство 'moveButtonVisibility' не найдено в 'object' '' DataView '(HashCode = 59215815)'. BindingExpression: Path = DataContext.moveButtonVisibility; DataItem = 'TreeView' (Name = 'treeView1 '), целевой элемент - «Button» (Name =' MoveHereButton '); целевое свойство - «Видимость» (тип «Видимость») –

+0

Это точно * прямое. У вас явно была ошибка 'Binding'. – Sheridan

ответ

0

следующие работали:

<Button Name="MoveHereButton" 
     Content="Move Here" 
     Visibility="{Binding DataContext.moveButtonVisibility, 
         RelativeSource={RelativeSource AncestorType={x:Type Page}}, 
         Converter={StaticResource visibilityConverter}}" 
     Click="MoveHereButton_Click" /> 

Ключ был добавить:

RelativeSource={RelativeSource AncestorType={x:Type Page}} 

внутри Visibility связывания, чтобы заставить управление использовать DataContext в Page.

+0

Если вы нашли ответ, вы можете пометить свой собственный ответ как правильный. –

+0

В нем говорится, что я не могу принять свой собственный ответ как правильный, после 2 дней. –

Смежные вопросы