带有用于搜索的文本框的 DataTemplate

DataTemplate with textbox for search

我用的是MasterDetailsView控件。它有 MasterHeaderTemplate 属性。我想添加一个 TextBox 以实现项目搜索。我不明白该怎么做。因为 DataTemplate 没有需要的 属性。这是 UWP 应用程序,不是 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>

您可以使用 Binding.ElementName 属性 设置您的 MasterDetailsView 的名称以用作绑定的绑定源。然后您可以访问其 DataContext(例如您的 ViewModel)并将 ViewModel 中的 属性 与 PlaceholderText 绑定。例如:

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

.cs:

public MainPage()
{
    this.InitializeComponent();
    ViewModel = new MyViewModel();
    ViewModel.Title = "Header";
    ViewModel.PlaceholderText = "MyPlaceholderText";

    this.DataContext = ViewModel;
}
private MyViewModel ViewModel { get; set; }