DataTemplate с текстовым полем для поиска - PullRequest
1 голос
/ 03 марта 2020

Я использую 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>

enter image description here

1 Ответ

1 голос
/ 04 марта 2020

Вы можете использовать свойство 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; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...