【发布时间】:2015-02-04 18:53:31
【问题描述】:
我想知道如何将绑定设置为我的 Viewmodel WorkTabViewModel 中的公共变量。我在下面设置了两个示例,
Foreground="{Binding MenuItemForeground}" 和
Foreground="{Binding MenuItemForeground, RelativeSource={RelativeSource AncestorType=UserControl}}"
但它们都无法识别 MenuItemForeground。
<TextBlock VerticalAlignment="Center" FontWeight="Bold" Margin="1 0 0 0" DataContext="{Binding Path=DataContext, RelativeSource={RelativeSource AncestorType=UserControl}}" >
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem Header="Close tab" cal:Message.Attach="[Click] = [CloseTab()]" />
<MenuItem Header="Close other tabs" cal:Message.Attach="[Click] = [CloseOtherTabs()]" IsEnabled="False" Foreground="{Binding MenuItemForeground, RelativeSource={RelativeSource AncestorType=UserControl}}"/>
<MenuItem Header="Close all tabs" cal:Message.Attach="[Click] = [CloseAllTabs()]" IsEnabled="False" Foreground="{Binding MenuItemForeground}"/>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
工作表视图模型
public Brush MenuItemForeground { get; set; }
public void CloseTab(){...}
public void CloseOtherTab(){...}
public void CloseAllTabs(){...}
【问题讨论】:
-
如果父 DataContext 实际设置为 WorkTabViewModel 的实例,并且 MenuItemForeground 属性具有值,则表达式
Foreground="{Binding MenuItemForeground}"应该可以工作。第二次尝试是错误的。此外,TextBlock 上的DataContext="{Binding Path=DataContext, ...}"是多余的,因为父 DataContext 被继承给子元素。 -
嗨 Clemens,当我设置 MenuItemForeground 时,它显示无法在“对象”类型的数据上下文中解析属性“menuitemforground”。它指向 WorkTabViewModel 并且可以工作,因为它会触发 closetab() 和其他函数。
-
试试看。 Foreground="{Binding DataContext.MenuItemForeground,RelativeSource={RelativeSource AncestorType=UserControl}}"