【问题标题】:WPF Setting DataContextWPF 设置数据上下文
【发布时间】:2015-09-25 22:00:54
【问题描述】:

我正在尝试学习 WPF 和绑定,但似乎无法理解发生了什么。我已经使用组合框复制了一个代码示例,并一直在尝试修改它以查看会发生什么。问题似乎与设置数据上下文有关。如果我在 InitializeComponent(); 之后设置它与 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 就可以工作的方法,以及为什么它可以工作,我将不胜感激。

【问题讨论】:

  • 你要设置什么样的DataContext?另一个班级? DC 适用于整个 Xaml,除非您明确更改它。您可以检查 VS 中的输出窗口是否存在绑定错误(在运行应用程序时)?
  • 这个问题的完美答案在这里:stackoverflow.com/questions/25549826/…

标签: c# wpf xaml combobox datacontext


【解决方案1】:

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

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

【讨论】:

  • 感谢这工作!因此,RelativeSource 正在查找树以查找 Window。如果这是多窗口应用程序的一部分,它会找到当前活动窗口并停在那里吗?我认为树适用于整个应用程序,而不仅仅是当前窗口。非常感谢您的帮助。
  • 它将使用控件所在的窗口,使用第一个匹配项。顺便说一句,这只是一种可能的解决方案,作为替代方案,您还可以使用定义为资源的 DataContext。
  • 我尝试迁移到具有多个 ComboBox、DataGrid 等的更大应用程序,但上面的解决方案不起作用。在输出窗口中,我收到错误:System.Windows.Data 错误:4:找不到与引用'RelativeSource FindAncestor,AncestorType ='System.Windows.Controls.ItemsControl',AncestorLevel ='1''的绑定源。绑定表达式:路径=垂直内容对齐;数据项=空;目标元素是'ComboBoxItem'(名称='');目标属性是“VerticalContentAlignment”(类型“VerticalAlignment”)
  • 信息不够分析,能否提供XAML?
猜你喜欢
  • 1970-01-01
  • 2012-12-16
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-13
相关资源
最近更新 更多