【问题标题】:Access an outer listview item source property from an inner listview in XAML?从 XAML 中的内部列表视图访问外部列表视图项源属性?
【发布时间】:2022-01-02 04:25:44
【问题描述】:

这里我有一个嵌套到另一个列表。 a 属性是表单项源outerItemSource。所以现在我想从内部列表访问这个属性。我如何实现它?这是我的代码

<ListView ItemsSource="{Binding outerItemSource}"  >
<ListBox.ItemTemplate>
    <DataTemplate>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <TextBlock Text="{Binding a}" Width="50"></TextBlock>
            <TextBlock Text="{Binding b}" Width="50" Grid.Row="1"></TextBlock>
            <TextBlock Text="{Binding c}" Width="50" Grid.Row="2"></TextBlock>
            <TextBlock Text="{Binding d}" Width="50" Grid.Row="3"></TextBlock>

            <ListView ItemsSource="{Binding innerItemSource}" Grid.Row="4">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <--a is from outerItemSource-->
                            <TextBlock Text="{Binding a}" />

                            <TextBlock Text="{Binding f}" />
                            <TextBlock Text="{Binding g}" />
                        </StackPanel>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </Grid>
    </DataTemplate>
</ListBox.ItemTemplate>

【问题讨论】:

    标签: c# asp.net .net xaml


    【解决方案1】:

    这可以使用代码或仅使用 XAML 来完成。

    第一种方式

    public partial class MainWindow : Window
    {
        public ObservableCollection<outerItemSource_class> outerItemSource { get; set; }
        public ObservableCollection<innerItemSource_class> innerItemSource { get; set; }
        public MainWindow()
        {
            InitializeComponent();
            outerItemSource = new ObservableCollection<outerItemSource_class>();
            outerItemSource.Add(new outerItemSource_class());
            outerItemSource.Add(new outerItemSource_class());
            DataContext = this;
        }
        
    }
    public class outerItemSource_class
    {
        public string a { get; set; }
        public string b { get; set; }
        public string c { get; set; }
        public string d { get; set; }
        public ObservableCollection<innerItemSource_class> innerItemSource { get; set; }
        public outerItemSource_class()
        {
            a = "outer a";
            b = "outer b";
            c = "outer c";
            d = "outer d";
            innerItemSource = new ObservableCollection<innerItemSource_class>();
            innerItemSource.Add(new innerItemSource_class(a));
        }
    }
    public class innerItemSource_class 
    {
        public string outer_a { get; set; }
        public string e { get; set; }
        public string f { get; set; }
        public string g { get; set; }
        public innerItemSource_class(string a)
        { 
            outer_a = a;
            e = "inner e";
            f = "inner f";
            g = "inner g";
        }
    }
    

    XAML:

        <ListView ItemsSource="{Binding outerItemSource}"  >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="*" />
                        </Grid.RowDefinitions>
                        <TextBlock Text="{Binding a}" Width="50"></TextBlock>
                        <TextBlock Text="{Binding b}" Width="50" Grid.Row="1"></TextBlock>
                        <TextBlock Text="{Binding c}" Width="50" Grid.Row="2"></TextBlock>
                        <TextBlock Text="{Binding d}" Width="50" Grid.Row="3"></TextBlock>
    
                        <ListView ItemsSource="{Binding innerItemSource}" Grid.Row="4">
                            <ListView.ItemTemplate>
                                <DataTemplate>
                                    <StackPanel>
                                        <TextBlock Text="{Binding outer_a}" />
    
                                        <TextBlock Text="{Binding f}" />
                                        <TextBlock Text="{Binding g}" />
                                    </StackPanel>
                                </DataTemplate>
                            </ListView.ItemTemplate>
                        </ListView>
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListView>
    

    第二种方式

        <ListView x:Name="OuterListView" ItemsSource="{Binding outerItemSource}"  >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="*" />
                        </Grid.RowDefinitions>
                        <TextBlock x:Name="TextBlock_a" Text="{Binding a}" Width="50"></TextBlock>
                        <TextBlock Text="{Binding b}" Width="50" Grid.Row="1"></TextBlock>
                        <TextBlock Text="{Binding c}" Width="50" Grid.Row="2"></TextBlock>
                        <TextBlock Text="{Binding d}" Width="50" Grid.Row="3"></TextBlock>
    
                        <ListView ItemsSource="{Binding innerItemSource}" Grid.Row="4">
                            <ListView.ItemTemplate>
                                <DataTemplate>
                                    <StackPanel>                                        
                                        <TextBlock Text="{Binding ElementName=TextBlock_a, Path=Text, 
                                            UpdateSourceTrigger=PropertyChanged}" />
    
                                        <TextBlock Text="{Binding f}" />
                                        <TextBlock Text="{Binding g}" />
                                    </StackPanel>
                                </DataTemplate>
                            </ListView.ItemTemplate>
                        </ListView>
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListView>
    

    无论如何,结果都是一样的

    【讨论】:

      猜你喜欢
      • 2021-09-14
      • 2022-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      相关资源
      最近更新 更多