Доброго времени суток!
У меня есть элемент TabControl, в котором я хочу реализовать кастомные Header, используя HeaderTemplate. Для этого я создал свой элемент:
<UserControl x:Class="iRestAdmin.CustomViews.TabHeader"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:customViews="clr-namespace:iRestAdmin.CustomViews">
<UserControl.DataContext>
<customViews:TabHeaderVm />
</UserControl.DataContext>
<StackPanel Margin="10">
<TextBlock Text="{Binding F}"
HorizontalAlignment="Center" />
<TextBlock Text="{Binding HeaderText}" />
</StackPanel>
</UserControl>
И реализовал для него ViewModel:
public class TabHeaderVm
{
public string F { get; set; }
public string HeaderText { get; set; }
}
В самом классе View создал два поля для того, чтобы из Xaml присваивать значения TextBlock'ам:
public partial class TabHeader
{
public string F
{
set => ((TabHeaderVm) DataContext).F = value;
}
public string HeaderText
{
set => ((TabHeaderVm) DataContext).HeaderText = value;
}
public TabHeader()
{
InitializeComponent();
}
}
В результате сам TabControl стал выглядеть следующим образом:
<TabControl TabStripPlacement="Bottom">
<TabItem>
<TabItem.HeaderTemplate>
<DataTemplate>
<customViews:TabHeader F="F1" HeaderText="Вкладка 1"></customViews:TabHeader>
</DataTemplate>
</TabItem.HeaderTemplate>
</TabItem>
</TabControl>
В результате всех манипуляций привязка к текста к `TextBlock'ам не идет. Как правильно реализовать то, что мне требуется, в рамках MVVM?
UPD:
Реализовал INotifyPropertyChanged у `ViewModel' и все заработало. Сейчас хотелось бы просто узнать, насколько правильно я реализовал все это
DataContext? – mtrfnv Feb 09 '20 at 12:30DependencyProperty, которые вы потом привязываете (<customViews:TabHeader F="F1" HeaderText="{Binding SomeProperty}">). Сам контрол должен должен отвечать лишь за отображение. Возьмите к примеруTextBlock, есть ли у него VM слой? А касательноDataContext, то его вы тоже должны установить только раз в приложение, все, дальше работаете с главной VM, заполняя ее чем надо. И кстати в XAML устанавливать не правильно. – EvgeniyZ Feb 09 '20 at 12:42