Reputation: 2224
I am trying to bind(combining) 1 ContentPage
.cs into another ContentPage
xaml page. But I am missing something.
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Class1" Title=""
xmlns:local="clr-namespace:namespace;assembly:assembly">
<ContentPage.Content>
<StackLayout>
<StackLayout Orientation="Vertical">
<Label Text="Select Refering Physician" HorizontalOptions="CenterAndExpand"
TextColor="Aqua" FontSize="20">
<Label.GestureRecognizers>
<TapGestureRecognizer Tapped="Handle_Handle" NumberOfTapsRequired="1" >
</TapGestureRecognizer>
</Label.GestureRecognizers>
</Label>
<ContentView x:Name="overlay"
AbsoluteLayout.LayoutBounds="0, 0, 1, 1"
AbsoluteLayout.LayoutFlags="All"
IsVisible="False"
BackgroundColor="#C0808080"
Padding="10, 0">
<StackLayout Orientation="Vertical"
BackgroundColor="White"
HorizontalOptions="Center"
VerticalOptions="Start"
Margin="0,20,0,0" >
<Label BackgroundColor="Black" FontSize="18" TextColor="White" HorizontalOptions="Fill" Text="Search a user" />
</StackLayout>
</ContentView>
</StackLayout>
<StackLayout>
<local:ListviewPage>
</local:ListviewPage>
</StackLayout>
</StackLayout>
</ContentPage.Content>
</ContentPage>
cs class of above file
public partial class Class1 : ContentPage
{
ListviewPage objListviewPage;
public Class1()
{
InitializeComponent();
objListviewPage = new ListviewPage(); // I want to bind this page to my xaml file
}
void Handle_Handle(object sender, System.EventArgs e)
{
Navigation.PushAsync(new SearchUser());
}
}
this class I am trying to bind
public class ListviewPage : ContentPage
{
ObservableCollection<ListViewModel> ListItems { get; set; } = new ObservableCollection<ListViewModel> {
new ListViewModel{Text = "Item 1"},
new ListViewModel{Text = "Item 2"},
new ListViewModel{Text = "Item 3"},
new ListViewModel{Text = "Item 4"},
new ListViewModel{Text = "Item 5"},
new ListViewModel{Text = "Item 6"},
new ListViewModel{Text = "Item 7"},
new ListViewModel{Text = "Item 8"},
new ListViewModel{Text = "Item 9"}
};
ListView ListView { get; set; }
public ListviewPage()
{
ListView = new ListView();
ListView.ItemsSource = ListItems;
ListView.ItemTemplate = new DataTemplate(typeof(CustomCell));
ListView.ItemTapped += MenuListView_ItemTapped;
var ListViewLayout = new StackLayout();
ListViewLayout.Padding = new Thickness(10, 20);
ListViewLayout.Children.Add(ListView);
Content = ListViewLayout;
}
void MenuListView_ItemTapped(object sender, ItemTappedEventArgs e)
{
if ((sender as ListView).SelectedItem == null)
return;
(sender as ListView).SelectedItem = null;
var item = e.Item as ListViewModel;
if (item.IsSelected)
item.IsSelected = false;
else
item.IsSelected = true;
}
}
I dont want to navigate I want it to be render in same page
Upvotes: 1
Views: 1302
Reputation: 549
Try to create new content page and copy you code to that page. Its the easy way
Upvotes: 0
Reputation: 3251
I think what you're trying to do should be done with a separate view/control, which can be used in multiple pages, and not by trying to put pages inside of pages.
public class ListViewControl : StackLayout
{
ObservableCollection<ListViewModel> ListItems { get; set; } = new ObservableCollection<ListViewModel>
{
new ListViewModel{Text = "Item 1"},
new ListViewModel{Text = "Item 2"},
new ListViewModel{Text = "Item 3"},
new ListViewModel{Text = "Item 4"},
new ListViewModel{Text = "Item 5"},
new ListViewModel{Text = "Item 6"},
new ListViewModel{Text = "Item 7"},
new ListViewModel{Text = "Item 8"},
new ListViewModel{Text = "Item 9"}
};
ListView ListView { get; set; }
public ListViewControl()
{
ListView = new ListView();
ListView.ItemsSource = ListItems;
ListView.ItemTemplate = new DataTemplate(typeof(CustomCell));
ListView.ItemTapped += MenuListView_ItemTapped;
//NOTE: this is where you would want to set any bindings,
//either in code or by adding a xaml file to do it in there instead.
Padding = new Thickness(10, 20);
Children.Add(ListView);
}
void MenuListView_ItemTapped(object sender, ItemTappedEventArgs e)
{
if ((sender as ListView).SelectedItem == null)
return;
(sender as ListView).SelectedItem = null;
var item = e.Item as ListViewModel;
if (item.IsSelected)
item.IsSelected = false;
else
item.IsSelected = true;
}
}
Then use that new class in your RadShedulerDiagnosis
page, set a BindingContext on the page or your view and use your new control in xaml <local:ListViewControl/>
.
Upvotes: 2