ورود

View Full Version : سوال: مشکل در بایند کردن tabcontrol



ma.andishe
پنج شنبه 04 شهریور 1400, 15:24 عصر
من یکobservablecollection تعریف کردم به این شکل :

private ObservableCollection<HeaderDetail> _tabs;
public ObservableCollection<HeaderDetail> Tabs
{
get { return _tabs; }
set { SetValue(ref _tabs, value); }



}



و یک کلاس هم به این شکل:



public class HeaderDetail
{

public IList<PageShowRec> Header { get; set; }
public IList<DetailRec> DetailPesrson { get; set; }



}



و یک تب کنترل هم دارم به این شکل:



<TabControl x:Name="_tabControl" ItemsSource="{Binding Tabs}">
<TabControl.ItemContainerStyle>
<Style TargetType="TabItem">
<Setter Property="Header" Value="{Binding Header}"/>
<Setter Property="Content" Value="{Binding DetailPesrson}"/>
</Style>
</TabControl.ItemContainerStyle>
</TabControl>




و متدی دارم به این شکل:

Tabs = new ObservableCollection<HeaderDetail>();

Tabs.Add(new HeaderDetail { Header = objDetail.CurPageShowList });
Tabs.Add(new HeaderDetail { DetailPesrson = objDetail.CurDetailList });






میخوام تب کنترل هدر و محتوای اون از این observablecollection پر بشه ولی پر نمیشه ایا مشکلی تو کدها است؟

SajjadKhati
پنج شنبه 04 شهریور 1400, 19:25 عصر
سلام
احتمالا مشکل از اینه که پروپرتی های Header و DetailPesrson در کلاسِ HeaderDetail را از نوعِ لیست گرفتین .
این پروپرتی ها را چون در TabItem تون Binding کردین ، باید آیتم های تکی باشن . یعنی از نوع لیست نباشن .

نوعِ DetailRec تون نمیدونم از چه نوعی هست . ولی استانداردش اینه که از نوعِ Panel ای باشه که شامل محتوا و کنترل هایی که در اون TabItem تون میخواد مشخص بشه .

barnamenevisjavan
پنج شنبه 04 شهریور 1400, 19:31 عصر
من یکobservablecollection تعریف کردم به این شکل :

private ObservableCollection<HeaderDetail> _tabs;
public ObservableCollection<HeaderDetail> Tabs
{
get { return _tabs; }
set { SetValue(ref _tabs, value); }



}



و یک کلاس هم به این شکل:



public class HeaderDetail
{

public IList<PageShowRec> Header { get; set; }
public IList<DetailRec> DetailPesrson { get; set; }



}



و یک تب کنترل هم دارم به این شکل:



<TabControl x:Name="_tabControl" ItemsSource="{Binding Tabs}">
<TabControl.ItemContainerStyle>
<Style TargetType="TabItem">
<Setter Property="Header" Value="{Binding Header}"/>
<Setter Property="Content" Value="{Binding DetailPesrson}"/>
</Style>
</TabControl.ItemContainerStyle>
</TabControl>




و متدی دارم به این شکل:

Tabs = new ObservableCollection<HeaderDetail>();

Tabs.Add(new HeaderDetail { Header = objDetail.CurPageShowList });
Tabs.Add(new HeaderDetail { DetailPesrson = objDetail.CurDetailList });






میخوام تب کنترل هدر و محتوای اون از این observablecollection پر بشه ولی پر نمیشه ایا مشکلی تو کدها است؟
مدل بصورت زیر تغییر کنه
public string Header { get; set; }
public string Content { get; set; }
البته Contentرو بعدا میتونید تغییر بدید
نحوه افزودن شما اشتباه هست و هر دو پراپرتی باید توی یک خط مقدار دهی بشه ن اینکه 2 تا instance جدا ایجاد کنید
Tabs.Add(new TabItem { Header = "One", Content = "One's content" });
Tabs.Add(new TabItem { Header = "Two", Content = "Two's content" });

itemtemplate و contenttemplate رو اورراید کنید و پراپرتی هارو بایند کنید
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock
Text="{Binding Header}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<TextBlock
Text="{Binding Content}" />
</DataTemplate>
</TabControl.ContentTemplate>

ma.andishe
جمعه 05 شهریور 1400, 13:00 عصر
اگر بخوام برای هر کانتنت محتوای متفاوت مثلا یکی لیست نشون یکی گرید چکار باید بکنم؟ اگه میشه با سمپل نشون بدید ممنون میشم

barnamenevisjavan
جمعه 05 شهریور 1400, 13:24 عصر
اگر بخوام برای هر کانتنت محتوای متفاوت مثلا یکی لیست نشون یکی گرید چکار باید بکنم؟ اگه میشه با سمپل نشون بدید ممنون میشم
اول باید تمپلیت رو تغییر بدی
<TabControl.ContentTemplate>
<DataTemplate>
<ContentControl
Content="{Binding Content}" />
</DataTemplate>
</TabControl.ContentTemplate>

بعد پراپرتی رو به جای استرینگ نوع مناسب قرار بدی تا بتونی توش گرید یا چیز دیگه بزاری

ma.andishe
جمعه 05 شهریور 1400, 13:59 عصر
اول باید تمپلیت رو تغییر بدی
<TabControl.ContentTemplate>
<DataTemplate>
<ContentControl
Content="{Binding Content}" />
</DataTemplate>
</TabControl.ContentTemplate>

بعد پراپرتی رو به جای استرینگ نوع مناسب قرار بدی تا بتونی توش گرید یا چیز دیگه بزاری


ممنون از پاسختون