我的标签项声明如下:
<TabItem >
<TabItem.HeaderTemplate>
<DataTemplate DataType="pricefiles:ConfigureViewModel">
<StackPanel Orientation="Horizontal">
<Path Style="{Binding StandardEnabled}"/>
<TextBlock Text="Standard" Margin="5" />
</StackPanel>
</DataTemplate>
</TabItem.HeaderTemplate>
<Grid Background="#FFE5E5E5">
<Standard:StandardView />
</Grid>
</TabItem>
然后在我的视图模型中我有:
private Style _standardEnabled;
public Style StandardEnabled
{
get { return _standardEnabled; }
set { SetProperty(ref _standardEnabled, value); }
}
public ConfigureViewModel(SYSTEM_Account account)
{
try
{
Account = account;
StandardEnabled = (Style) Application.Current.FindResource("HeadersIcon");
}
catch (Exception ex)
{
}
}
该样式位于声明为:
的资源字典中 <Style x:Key="HeadersIcon" TargetType="Path">
<Setter Property="Data" Value="M0,13.333001L35.555001,13.333001 35.555001,33.778223C35.555001,35.250969,34.36089,36.445002,32.88818,36.445002L2.666523,36.445002C1.1938604,36.445002,2.4359167E-07,35.250969,0,33.778223z M3.2485678,6.19415L3.2485678,8.0274701 22.415489,8.0274701 22.415489,6.19415z M3.2485678,2.6108398L3.2485678,4.44415 22.415489,4.44415 22.415489,2.6108398z M2.666523,0L32.88818,0C34.36089,0,35.555001,1.19415,35.555001,2.6666899L35.555001,10.222 0,10.222 0,2.6666899C2.4359167E-07,1.19415,1.1938603,0,2.666523,0z" />
<Setter Property="RenderTransformOrigin" Value="0.5,0.5"></Setter>
<Setter Property="Stretch" Value="Uniform"></Setter>
<Setter Property="Fill" Value="#FF000000"></Setter>
<Setter Property="Width" Value="16"></Setter>
<Setter Property="Height" Value="16"></Setter>
</Style>
当此代码触发时,我可以在StandardEnabled属性中看到资源(样式),但是它不会将数据绑定到路径。
我打算根据不同的情况用不同的资源对数据进行数据绑定。
编辑:
当用户按下父窗口上的按钮时,将初始化view / viewmodel:
try
{
var tmpVm = new ConfigureViewModel(SystemAccount);
var tmp = new ConfigureView(tmpVm);
tmp.ShowDialog();
}
catch (Exception ex)
{
}
初始化数据上下文:
public ConfigureView(ConfigureViewModel configureViewModel)
{
InitializeComponent();
DataContext = configureViewModel;
}
答案 0 :(得分:1)
我重新创建了你的问题。问题是您定义的HeaderTemplate
定位ConfigureViewModel
,但未明确将Header
的内容设置为该类型的对象。
由于您设置DataContext
的方式,实际上无需定义模板。您可以正常定义控件,绑定将按预期工作。您可以使用以下XAML
TabItem.HeaderTemplate
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<Path Style="{Binding StandardEnabled}"/>
<TextBlock Text="Standard" Margin="5" />
</StackPanel>
</TabItem.Header>
如果要保留标题模板,可以公开类型为ConfigureViewModel
的属性,然后将标签项的标题绑定到该属性。它可能需要一些小的重构,但它可能是你想要的。以下是一个例子。
<TabItem.HeaderTemplate>
<DataTemplate DataType="pricefiles:ConfigureViewModel">
<StackPanel Orientation="Horizontal">
<Path Style="{Binding StandardEnabled}"/>
<TextBlock Text="Standard" Margin="5" />
</StackPanel>
</DataTemplate>
</TabItem.HeaderTemplate>
<TabItem.Header = "{Binding MyConfigureViewModel}" />
使用第一个解决方案,您将明确定义标头的外观,并将其属性直接绑定到DataContext
。使用第二个解决方案,您说我想将我的标题内容直接绑定到DataContext
上的内容。然后使用模板定义应该如何显示该对象。希望能够区分清楚。