我正在尝试学习WPF和绑定,但似乎无法理解发生了什么。我使用组合框复制了一个代码示例,并一直在尝试修改它以查看会发生什么。问题似乎在于设置datacontext。如果我在InitializeComponent()之后设置它; with DataContext = this;一切都很好。但是,我无法使示例与其他任何DataContext设置一起使用。我试过了
DataContext="{Binding RelativeSource={RelativeSource Self}}"
Name="_this" DataContext="{Binding ElementName=_this}"
我的组合框中没有数据。
背后的代码是:
cbItems = new ObservableCollection<ComboBoxItem>();
var cbItem = new ComboBoxItem { Content = "All" };
SelectedItem = cbItem;
cbItems.Add(cbItem);
var items = (from a in dc.Counties
select a.CountyName).ToList();
foreach (var item in items)
{
//cbItems.Add(cbItem);
cbItems.Add(new ComboBoxItem{Content = item});
}
xaml是
<ComboBox x:Name="ComBoCounty" HorizontalAlignment="Left" Margin="44,38,0,0" VerticalAlignment="Top"
Width="120" ItemsSource="{Binding cbItems}" SelectedItem="{Binding SelectedcbItem}"
Loaded="ComBoCounty_OnLoaded" SelectionChanged="ComBoCounty_OnSelectionChanged" Height="20" />
我使用ReSharper,它给出了一个错误指示,并提供了DataContext值的建议。在我的组合框中没有数据,我已经尝试了所有这些。这似乎是最基本的事情之一,我花了很多时间来尝试。如果有人可以告诉我一个方法,这可以工作,而无需在xaml中设置DataContext以及为什么它工作,我将不胜感激。
答案 0 :(得分:0)
ItemsSource您可以将DataContext绑定到您的窗口
(通过设置DataContext = this ,这与您在代码中尝试的相同):
<Grid DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}">
<ComboBox ItemsSource="{Binding Path=cbItems}" ...></ComboBox>
</Grid>