WPF - 绑定到不同 ItemSource 内的 Ancestor 可以工作,但会导致错误

问题描述 投票:0回答:1

我正在尝试将 DataTemplate 内标签的前景绑定到祖先,这是摘录:

查看模型代码

    public class DeviceOverview
    {
        public string DeviceName { get; set; }
        public string DeviceState { get; set; }
    }

    public ObservableCollection<DeviceOverview> DeviceOverviewList { get; set; }

这是xaml:

                            <ItemsControl ItemsSource="{Binding DeviceOverviewList}">
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <DockPanel Margin="20,5,5,5">
                                        <Image Source="{Binding DeviceState, Converter={StaticResource ConvertStateToLed}}" Width="30"/>
                                        <Label Content="{Binding DeviceName}" Width="220" Margin="-60,0,0,0"  Foreground="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=DataContext.FontColor}"/>
                                    </DockPanel>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>

Window 控件有自己的 DataContext 及其 ViewModel 及其属性 FontColor,并且一切正常。尽管如此,我还是收到以下错误:

在 DeviceOverview 对象中找不到 FontColor 属性。

为什么我会收到此错误?我怎样才能摆脱它? 谢谢

wpf data-binding datatemplate findancestor
1个回答
0
投票

假设 FontColor 是窗口 ViewModel 的属性,则您的绑定声明中存在一些错误。

<Label Content="{Binding DeviceName}" 
       Width="220"
       Margin="-60,0,0,0"
       Foreground="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.FontColor}" />

另请注意,

Label.Foreground
Brush
,而不是
Color
,需要绑定到该类型的 a 属性,或者使用值转换器。

© www.soinside.com 2019 - 2024. All rights reserved.