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; }