C# 从ControlTemplate获取模板元素内容或文本
我正在开发一个WindowsPhone8c和SQLite应用程序。我对Windows Phone应用程序非常陌生,通常使用PHP和JS 有一个LongListSelector,每个项目都是一个按钮。每个按钮都应引用从SQLite类绑定的ID:C# 从ControlTemplate获取模板元素内容或文本,c#,xaml,mobile,windows-phone-8,C#,Xaml,Mobile,Windows Phone 8,我正在开发一个WindowsPhone8c和SQLite应用程序。我对Windows Phone应用程序非常陌生,通常使用PHP和JS 有一个LongListSelector,每个项目都是一个按钮。每个按钮都应引用从SQLite类绑定的ID: <phone:LongListSelector x:Name="llsRadios" ItemsSource="{Binding Radios}" ItemTemplate="{StaticResource DataTemplate1}"/>
<phone:LongListSelector x:Name="llsRadios" ItemsSource="{Binding Radios}" ItemTemplate="{StaticResource DataTemplate1}"/>
我的第一个想法是将ID绑定到每个按钮的内容,这样我就可以在btnFoo_上运行单击:
但这似乎不是正确的方法。此外,我还必须在概念菜单上使用相同的概念,暂停时会显示两个选项:编辑和删除。这些必须对用户正在选择的元素执行操作
我还认为我可以访问按钮的模板,并找到一个隐藏元素,其思想与将值绑定到其文本或内容属性相同。但我找不到从模板中选择元素的方法,有点像jQuery的find:$'.parent'.find'.element-I-need'
坚持第二个想法,我如何在单击的按钮/元素的ControlTemplate上按元素名称搜索元素?首先,您知道可以通过DataContext获得模型吗?这是在单击处理程序中执行此操作的最直接方法:
Button btn = sender as Button;
var viewmodel = btn.DataContext as MyItemModel;
var ID = viewmodel.ID;
// Do SQLite select.
第二,您不能直接从控件外部访问模板元素,但这是一种受保护的方法。与JQuery find大致相当的是跟踪,但在XAML中这是一种非常糟糕的形式,并不总是有效——例如,不是所有内容都在可视化树中。但是,您可以对Button控件进行子类化,并公开使用GetTemplateChild的公共属性
理想情况下,您的模型逻辑不应该与UI交互。如果可能,最好在SomeCommand是ICommand实现的地方使用,而不是使用。说起来容易做起来难,尤其是在没有FindAncestor绑定的WP Silverlight中…我非常确定DataContext是我完全忘记的东西,因为它看起来有点复杂,但实际上正是我需要的。因为LongListSelector是由Radio绑定的,所以它的子级也已经设置了这个属性,对吗?对于jQuery的find方法,我希望它不容易,甚至不可能。我认为坚持使用DataContext并理解它会对我有很大帮助。非常感谢。
<ControlTemplate x:Key="ButtonControlTemplate1" TargetType="Button">
<Grid>
<TextBlock x:Name="lblName" Text="Name" />
<TextBlock x:Name="lblCountry" Text="Country" />
</Grid>
</ControlTemplate>
this.getAttribute('data-id');
// run an AJAX request
Button btn = sender as Button;
var ID = sender.Content;
// Do SQLite select.
Button btn = sender as Button;
var viewmodel = btn.DataContext as MyItemModel;
var ID = viewmodel.ID;
// Do SQLite select.