C# 使用ItemSource时ComboboxItem的WPF绑定错误
我有一个WPF应用程序.NET4.5.1,在其中动态地在组合框中创建项,并使用可观察的集合绑定到ItemSource。但是当我这样做的时候,对于我添加的每个项目,我会得到两个绑定错误,一个用于VeticalContentAlignment,一个用于HorizontalContentAlignmentC# 使用ItemSource时ComboboxItem的WPF绑定错误,c#,wpf,data-binding,combobox,C#,Wpf,Data Binding,Combobox,我有一个WPF应用程序.NET4.5.1,在其中动态地在组合框中创建项,并使用可观察的集合绑定到ItemSource。但是当我这样做的时候,对于我添加的每个项目,我会得到两个绑定错误,一个用于VeticalContentAlignment,一个用于HorizontalContentAlignment System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindA
System.Windows.Data Error: 4 :
Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''.
BindingExpression:Path=VerticalContentAlignment; DataItem=null; target element is 'ComboBoxItem' (Name='PhoneItem');
target property is 'VerticalContentAlignment' (type 'VerticalAlignment')
我在谷歌上搜索到了一些没有帮助的提示,例如添加了一个全局风格
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="VerticalContentAlignment" Value="Center" />
</Style>
或者在组合框中定义内联容器样式
<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Left" />
<Setter Property="VerticalContentAlignment" Value="Center" />
</Style>
</ComboBox.ItemContainerStyle>
我可以在一个干净的项目中复制它,在这个项目中,我没有样式,只有一个绑定到可观察集合的组合框,如果有人有兴趣查看我的剥离代码的话
更新1-我的XAML和代码隐藏
更新2-链接到示例项目
非常感谢您对消除这些错误的任何帮助 好的,修复了您的错误。只需将您的代码替换为
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
MyItems = new ObservableCollection<ComboBoxItem>();
MyItems.Add(new ComboBoxItem
{
Name = "PhoneItem_" + DateTime.Now.Second,
Content = string.Format("Phone: {0}", "123"),
HorizontalContentAlignment = HorizontalAlignment.Left,
VerticalContentAlignment = VerticalAlignment.Center
});
}
public ObservableCollection<ComboBoxItem> MyItems { get; set; }
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
MyItems.Add(new ComboBoxItem
{
Name = "PhoneItem_" + DateTime.Now.Second,
Content = string.Format("Phone: {0}", "123"),
HorizontalContentAlignment = HorizontalAlignment.Left,
VerticalContentAlignment = VerticalAlignment.Center
});
}
}
你能给我链接一个干净的项目,我可以复制它吗?你能把XAML代码发布到定义ComboBox的地方吗?我怀疑这个错误与你为ComboBox定义绑定的方式有关。请发布xaml代码以及您的ViewModel或xaml代码隐藏。@FodderZone感谢您的帮助,我已在原始问题中添加了我的xaml和代码隐藏。我希望你能发现我犯的任何错误@aks81感谢您的帮助,我在原始问题中添加了我的xaml和代码。我希望你能发现我犯下的任何错误,这让我困惑了很长一段时间-不知道为什么我甚至没有想到显式设置有问题的属性。有时甚至我在编码时失去了常识。这是开发人员的一部分:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
MyItems = new ObservableCollection<ComboBoxItem>();
MyItems.Add(new ComboBoxItem
{
Name = "PhoneItem_" + DateTime.Now.Second,
Content = string.Format("Phone: {0}", "123"),
HorizontalContentAlignment = HorizontalAlignment.Left,
VerticalContentAlignment = VerticalAlignment.Center
});
}
public ObservableCollection<ComboBoxItem> MyItems { get; set; }
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
MyItems.Add(new ComboBoxItem
{
Name = "PhoneItem_" + DateTime.Now.Second,
Content = string.Format("Phone: {0}", "123"),
HorizontalContentAlignment = HorizontalAlignment.Left,
VerticalContentAlignment = VerticalAlignment.Center
});
}
}