c# - WPF绑定(bind)问题

标签 c# wpf data-binding binding

我刚开始使用 WPF 和绑定(bind),但有一些我不理解的奇怪行为。

示例 1: 一个非常简单的 WPF 表单,只有一个组合框 (name = C) 和构造函数中的以下代码:

    public Window1()
    {
        InitializeComponent();

        BindingClass ToBind = new BindingClass();
        ToBind.MyCollection = new List<string>() { "1", "2", "3" };

        this.DataContext = ToBind;

        //c is the name of a combobox with the following code :  
        //<ComboBox Name="c" SelectedIndex="0" ItemsSource="{Binding Path=MyCollection}" />
        MessageBox.Show(this.c.SelectedItem.ToString());
    }

你能解释一下为什么这会因为 this.c.SelectedItem 为 NULL 而崩溃吗。

所以我虽然......没问题,因为它在构造函数中,让我们将代码放在加载表单事件中:

        public Window1()
    {
        InitializeComponent();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        BindingClass ToBind = new BindingClass();
        ToBind.MyCollection = new List<string>() { "1", "2", "3" };
        this.DataContext = ToBind;
        MessageBox.Show(this.c.SelectedItem.ToString());
    }

同样的问题this.c.SelectedItem is null...

备注:如果我删除 Messagebox 东西,那么绑定(bind)工作正常,我在组合框中有值。这就像在设置数据上下文后是否需要“一些”时间。但是如何知道绑定(bind)何时完成?

谢谢你的帮助。

最佳答案

因为selectionchanged还没有触发,所以selecteditem还是null。

private void c_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
   MessageBox.Show(this.c.SelectedItem.ToString());
}

如果您是 WPF 的新手,我建议您去看看 MVVM 模式。这里有一个非常好的介绍视频:http://blog.lab49.com/archives/2650

关于c# - WPF绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2336788/

相关文章:

wpf - WPF 的 GridView 有垂直边框吗?

c# - 如何复制包含溢出内容的 FrameworkElement?

c# - 从控件获取绑定(bind)对象

c# - 本地数据缓存同步不会将客户端更改保存到 sdf 文件

c# - 在模型内的模型列表中添加项目

c# - MODI还在维护吗?

.net - 如何使用 Snoop 窥探工具提示?

javascript - 如果使用 setTimeout,AngularJS 会出现奇怪的数据绑定(bind)行为

c# - 向 FlowDocument 文档添加页脚

c# - IRepository<T> 与 Repository 的具体意义(如果我不使用模拟进行单元测试)