我正在尝试将依赖项属性绑定到另一个属性,但它似乎不起作用。我在另一个ItemsControl中有一个ItemsControl:
<!--This is an itemscontrol in BigBox.xaml that contains bins-->
<ItemsControl
x:Name="ctrlBin"
Grid.Column="1"
Grid.Row="1"
ItemsPanel="{StaticResource HorizontalStackPanel}"
ItemsSource="{Binding Bins}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ItemsControl
ItemsSource="{Binding}"
ItemContainerStyle="{StaticResource BinViewContainer}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:BinView
x:Name="ctrlBin"
BorderBrush="Black"
BorderThickness="1"
Bin="{Binding}"
BinFlashStart="{Binding DashboardFlashStart}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
这是我的BigBox&#39;
private bool? m_DashboardFlashStart;
public bool? DashboardFlashStart
{
get=> m_DashboardFlashStart;
set => Set(ref m_DashboardFlashStart, value);
}
这是我的BinView
//This is in the BinView.xaml.cs
public static DependencyProperty BinFlashStartProperty =
DependencyProperty.Register(
"BinFlashStart",
typeof(bool?),
typeof(BinView),
new PropertyMetadata(null, OnBinFlashStartSet));
private static void OnBinFlashStartSet(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
BinVM Bin = ((BinView)sender).m_BinVM;
Bin.CurBin.FlashBin = (bool?)e.NewValue;
}
public bool? BinFlashStart
{
get => (bool?) GetValue(BinFlashStartProperty);
set => SetValue(BinFlashStartProperty, value);
}
我得到了一个错误
System.Windows.Data Error: 40 : BindingExpression path error: 'DashboardFlashStart' property not found on 'object' ''Bin' (HashCode=-125066214)'. BindingExpression:Path=DashboardFlashStart; DataItem='Bin' (HashCode=-125066214); target element is 'BinView' (Name=''); target property is 'BinFlashStart' (type 'Nullable`1')
为什么要在&#39; Bin&#39;上寻找DashboardFlashStart属性。我认为这是BigBox的来源。 就像我把静态值&#34; True&#34;在BigBox.xaml中为BinFlashStart而不是绑定然后工作。为什么我无法绑定到BigBox的DashboardFlashStart。
如果有人可以解释发生了什么,那将非常有帮助。 我是这个WPF的新手。
答案 0 :(得分:1)
您的控件正在其的datacontext中查找名为DashboardFlashStart的属性。但该物业不在&#34; Bin&#34;但是在BigBox中,所以你需要做的是为这个绑定指定绑定到bigbox datacontext的源。
更改您的约束BinFlashStart="{Binding DashboardFlashStart}"
有这样的东西
{Binding DataContext.DashboardFlashStart, ElementName=ctrlBin}"
答案 1 :(得分:1)
如果在BigBox
类的代码隐藏中定义了BigBox.xaml.cs
属性,即在BinFlashStart="{Binding DashboardFlashStart, RelativeSource={RelativeSource AncestorType=local:BigBox}}"/>
中,这应该可以工作:
DeviceTrackerHistoryModel.getAggregation = (query) => {
return DeviceTrackerHistoryModel.aggregate(query);
}