[英]How to access xaml Control inside DataTemplate inside FlipView
[英]Access a Named Control Inside a XAML DataTemplate
我设法在GridViewItem的数据模板中访问以下代码:
private void btnChangePhoneNumber_Click(object sender, RoutedEventArgs e)
{
GridCell.SelectedItem = GridCell.Items[3];
var container = GridCell.ContainerFromIndex(3);
var _children = AllChildren(container);
var _control = _children.First(c => c.Name == "PhoneNumber");
_control.text = "123456789";
}
public List<TextBlock> AllChildrenText(DependencyObject parent)
{
var _List = new List<TextBlock> { };
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
{
var _Child = VisualTreeHelper.GetChild(parent, i);
if (_Child is TextBlock)
{
_List.Add(_Child as TextBlock);
}
_List.AddRange(AllChildrenText(_Child));
}
return _List;
}
GridCell是Gridview。
这项工作..但是..
如果我用少于40个项目实现GridView
,那就好了。 如果我实现了与gridView
有10000项,与该方法发生了变化的文字: btnChangePhoneNumber_Click
,也发生在其他项目......既然,在我无法理解的原因btnChangePhoneNumber_Click
方法,只选择一个项目。
提前致谢。 一声问候。
我已经测试了您的代码,但是无法在您这一边重现您的问题。 就我而言,在GridView
渲染10000个项目的性能很差。 并且使用VisualTreeHelper
会带来较差的性能。 您可以使用mvvm ViewModel绑定数据模板中的TextBlock
文本。 您只需要修改视图模型, TextBlock
的文本就会更改。 有关更多信息,请参阅深入数据绑定 。 以下是ViewModel的段代码。
MainPageViewModel.cs
public class MainPageViewModel : ViewModelBase
{
private ObservableCollection<Phone> _items;
public ObservableCollection<Phone> Items
{
get
{
return _items;
}
set
{
_items = value;
OnPropertyChanged();
}
}
public MainPageViewModel()
{
var list = new ObservableCollection<Phone>();
for (var i = 0; i < 1000; i++)
{
list.Add(new Phone { PhoneNumber = "123456" });
}
_items = list;
}
}
MainPage.xaml
<Page.DataContext>
<local:MainPageViewModel x:Name="ViewModel"/>
</Page.DataContext>
<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Button Click="btnChangePhoneNumber_Click" Content=" click me"/>
<GridView x:Name="GridCell" Height="400" ItemsSource="{Binding Items}" >
<GridView.ItemTemplate>
<DataTemplate x:DataType="local:Phone">
<TextBlock Text="{x:Bind PhoneNumber ,Mode=OneWay}"/>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</StackPanel>
我已将代码示例上传到github。 请检查!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.