2015-11-16 2 views
1

Я делаю Windows 8.1 для магазина приложений с Visual Studio 2015. У меня есть ListView с GridView, который работает хорошо. В некотором столбце есть TextBlock, а его Text - Bind, но я хотел изменить привязку с другим полем на Radio Button Checked. Ниже мой код.Change ListView Элемент привязки динамически

<ListView Name="lvData" Margin="5,0" HorizontalAlignment="Stretch" Grid.Row="2" BorderBrush="Black" 
            BorderThickness="1" Foreground="#000" VerticalAlignment="Center"> 
        <ListView.HeaderTemplate> 
         <DataTemplate> 
          <Grid> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition /> 
            <ColumnDefinition /> 
            <ColumnDefinition /> 
            <ColumnDefinition /> 
           </Grid.ColumnDefinitions> 
           <GridViewHeaderItem Grid.Column="0" x:Uid="Number" Style="{StaticResource GridViewHeader}" /> 
           <GridViewHeaderItem Grid.Column="1" x:Uid="_Dept" Style="{StaticResource GridViewHeader}" /> 
           <GridViewHeaderItem Grid.Column="2" x:Uid="Arr" Style="{StaticResource GridViewHeader}" /> 
           <GridViewHeaderItem Grid.Column="3" x:Uid="CurrentStatus" Style="{StaticResource GridViewHeader}" /> 
          </Grid> 
         </DataTemplate> 
        </ListView.HeaderTemplate> 
        <ListView.ItemContainerStyle> 
         <Style TargetType="ListViewItem"> 
          <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
         </Style> 
        </ListView.ItemContainerStyle> 
        <ListView.ItemTemplate> 
         <DataTemplate> 
          <Grid> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition /> 
            <ColumnDefinition /> 
            <ColumnDefinition /> 
            <ColumnDefinition /> 
           </Grid.ColumnDefinitions> 
           <GridViewItem Grid.Column="0" Style="{StaticResource GridViewItem}" Content="{Binding Number}"/> 
           <GridViewItem Grid.Column="1" Style="{StaticResource GridViewItem}"> 
            <StackPanel> 
             <TextBlock x:Name="DepTime" Text="{Binding DeptTime}" TextWrapping="Wrap" MaxWidth="65"/> 
             <TextBlock Text="" TextWrapping="Wrap"/> 
             <TextBlock x:Uid="Actual" TextWrapping="Wrap" MaxWidth="65" HorizontalAlignment="Center"/> 
             <TextBlock Text="{Binding DeptStn}" Foreground="SkyBlue" TextWrapping="Wrap" MaxWidth="65" HorizontalAlignment="Center"/> 
            </StackPanel> 
           </GridViewItem> 
           <GridViewItem Grid.Column="2" Style="{StaticResource GridViewItem}"> 
            <StackPanel> 
             <TextBlock x:Name="ArrTime" Text="{Binding ArrTime}" TextWrapping="Wrap" MaxWidth="65"/> 
             <TextBlock Text="" TextWrapping="Wrap"/> 
             <TextBlock x:Uid="Actual" TextWrapping="Wrap" MaxWidth="65" HorizontalAlignment="Center"/> 
             <TextBlock Text="{Binding ArrivCode}" Foreground="SkyBlue" TextWrapping="Wrap" MaxWidth="65" HorizontalAlignment="Center"/> 
            </StackPanel> 
           </GridViewItem> 
           <GridViewItem Grid.Column="3" Style="{StaticResource GridViewItem}" Foreground="{Binding Color}" > 
            <TextBlock Text="{Binding CurrentStatus}" TextWrapping="Wrap" MaxWidth="60" HorizontalAlignment="Center"/> 
           </GridViewItem> 
          </Grid> 
         </DataTemplate> 
        </ListView.ItemTemplate> 
       </ListView> 

В приведенном выше столбце индекса индекса 1 и 2 имеется текстовое связывание TextBlock, которое я хотел бы изменить на событии, отмеченном переключателем.

+0

Вы можете, конечно, определить привязки программна, но, может быть, проще было бы, если вы только что определили два отдельных TextBlocks, каждые из которых отличается привязка и просто изменение их видимости в зависимости от переключателя - тогда почти все можно определить в xaml. – Romasz

+0

Это хорошая идея, но дело в том, что я не могу получить доступ к элементу управления внутри GridViewItem. Пожалуйста, помогите мне в этом – Milind

+0

Что вы подразумеваете под «Я не могу получить доступ к контрулу внутри GridViewItem»? Кроме того - я не вижу переключатель в вашем коде. – Romasz

ответ

0

Ну, я шел в неправильном направлении, логика, которую @Romasz дал, чтобы держать видимым, была абсолютно правильной, но все же я шел неверный путь доступа к элементам управления из кода позади. Но он не может получить доступ к коду, поскольку он находится в DataTemplate.

Так что я создал булево IValueConverter ниже

public class BooleanToVisibilityConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, string language) 
     { 
      if ((bool)value) 
       return Visibility.Visible; 
      else 
       return Visibility.Collapsed; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, string language) 
     { 
      throw new NotImplementedException(); 
     } 
    } 

Затем я добавил ниже Page.Resources

<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/> 

Тогда в реальной TextBlock

<TextBlock x:Name="DepTime" Text="{Binding Time}" TextWrapping="Wrap" MaxWidth="65" Visibility="{Binding ElementName=LocalTime, Path=IsChecked, Converter={StaticResource BooleanToVisibilityConverter}}"/> 

В выше ElementName = LocalTime, потому что мое радио имя кнопки LocalTime

Надеется, что это поможет кому-то