WPF设置DataContext

时间:2015-07-08 06:32:53

标签: c# wpf xaml combobox datacontext

我正在尝试学习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以及为什么它工作,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

ItemsSource您可以将DataContext绑定到您的窗口
(通过设置DataContext = this ,这与您在代码中尝试的相同):

    <Grid DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}">
       <ComboBox ItemsSource="{Binding Path=cbItems}" ...></ComboBox>
    </Grid>