带有用于搜索的文本框的 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; }
我用的是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; }