Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从ControlTemplate获取模板元素内容或文本_C#_Xaml_Mobile_Windows Phone 8 - Fatal编程技术网

C# 从ControlTemplate获取模板元素内容或文本

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}"/>

我正在开发一个WindowsPhone8c和SQLite应用程序。我对Windows Phone应用程序非常陌生,通常使用PHP和JS

有一个LongListSelector,每个项目都是一个按钮。每个按钮都应引用从SQLite类绑定的ID:

<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.