动态更改 ListView 项目绑定

Change ListView Item Binding dynamically

我正在为 Visual Studio 2015 的应用商店制作 Windows 8.1。我有 ListView 和 GridView,效果很好。在某些列中有 TextBlock,它的文本是 Bind,但我想在选中的单选按钮上更改与不同字段的绑定。下面是我的代码。

<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 文本绑定,我想在选中单选按钮事件时对其进行更改。

好吧,我走错了方向,@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

希望对大家有所帮助