C# 用于搜索的带有文本框的DataTemplate
我使用控制。它具有C# 用于搜索的带有文本框的DataTemplate,c#,mvvm,data-binding,uwp,datatemplate,C#,Mvvm,Data Binding,Uwp,Datatemplate,我使用控制。它具有MasterHeaderTemplate属性。我想添加一个文本框,以实现项目搜索。我不知道该怎么做。因为DataTemplate没有所需的属性。这是UWPapp,不要WPF TextBlock通过MasterHeader属性获取值。但如何做其他绑定。例如,占位符文本、事件处理程序 MasterHeader="{x:Bind ViewModel.Title}" MasterHeaderTemplate="{StaticResource MasterHeaderTemplate}"
MasterHeaderTemplate
属性。我想添加一个文本框
,以实现项目搜索。我不知道该怎么做。因为DataTemplate
没有所需的属性。这是UWP
app,不要WPF
TextBlock
通过MasterHeader
属性获取值。但如何做其他绑定。例如,占位符文本、事件处理程序
MasterHeader="{x:Bind ViewModel.Title}"
MasterHeaderTemplate="{StaticResource MasterHeaderTemplate}"
<DataTemplate
x:Key="MasterHeaderTemplate">
<StackPanel>
<TextBlock
Text="{Binding}"
Style="{StaticResource HeaderStyle}" />
<TextBox
PlaceholderText="{???}" />
</StackPanel>
</DataTemplate>
MasterHeader=“{x:Bind ViewModel.Title}”
MasterHeaderTemplate=“{StaticResource MasterHeaderTemplate}”
您可以使用该属性设置要用作绑定源的MasterDetailsView的名称。然后,您可以访问其DataContext(例如您的ViewModel),并使用占位符文本绑定ViewModel中的属性。例如:
.xaml:
<Page.Resources>
<DataTemplate x:Key="MasterHeaderTemplate">
<StackPanel>
<TextBlock
Text="{Binding}" />
<TextBox PlaceholderText="{Binding ElementName=MyDetailView,Path=DataContext.PlaceholderText}"/>
</StackPanel>
</DataTemplate>
</Page.Resources>
<Grid>
<controls:MasterDetailsView
ItemsSource="{Binding Lists}"
x:Name="MyDetailView" MasterHeader="{Binding Title}" MasterHeaderTemplate="{StaticResource MasterHeaderTemplate}">
<controls:MasterDetailsView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"></TextBlock>
</DataTemplate>
</controls:MasterDetailsView.ItemTemplate>
</controls:MasterDetailsView>
</Grid>
您试图绑定占位符文本的内容是什么?只是ViewModel上的普通属性?您是否可以不执行{Binding DataContext.placeholder TextProperty}?@RyanThomas Inside
DataTemplate
无法访问DataContext或my viewmodel。我认为您必须将正在使用DataTemplate的控件绑定到一个同时具有文本值和占位符值的接口。否则,你将不得不盲目地走上控制链,这可能不是最好的主意。
public MainPage()
{
this.InitializeComponent();
ViewModel = new MyViewModel();
ViewModel.Title = "Header";
ViewModel.PlaceholderText = "MyPlaceholderText";
this.DataContext = ViewModel;
}
private MyViewModel ViewModel { get; set; }