【问题标题】:Access controls inside listview DataTempletelistview DataTemplate 内的访问控制
【发布时间】:2023-03-16 06:10:01
【问题描述】:

我想访问列表视图数据模板中的命名控件,我遵循了这个:How to Access a Named Control Inside a XAML DataTemplate (using CSharp

itemlistview.ItemsSource=new List<MyObject>();    
foreach (var item in itemListView.Items)
                {
                    var _Container = itemListView.ItemContainerGenerator
                        .ContainerFromItem(item);
                    var _Children = AllChildren(_Container);

                    var _FirstName = _Children.OfType<StackPanel>()
                        .First(x => x.Name.Equals("subjectListItem"));

                    _FirstName.Visibility =
                        Visibility.Collapsed;
                }

var item in itemListView.Items 中的问题它会重新运行我传递给 listview ItemsSource 的 MyObject 而不是数据模板中的控件。 那么我怎样才能返回控件呢?

【问题讨论】:

    标签: xaml windows-8 microsoft-metro


    【解决方案1】:

    ItemContainerGenerator.ContainerFromItem(object) 应该返回一个包含item 数据的ListViewItem 实例。

    但是,在 WPF/WinRT 框架中不鼓励这种做法。 “正确”的方式是控制数据并让 UI 对其做出反应。

    类似:

    // in code
    var list = new List<MyObject>();
    foreach (var item in list)
    {
        item.IsSomethingVisible = false;
    }
    itemlistview.ItemsSource = list;
    
    <!--in XAML-->
    <StackPanel Visibility="{Binding IsSomethingVisible,
                       Converter={StaticResource BooleanToVisibilityConverter}}".../>
    
    <!--The converter is defined in resources of some higher level-->
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 2013-04-28
      • 1970-01-01
      相关资源
      最近更新 更多