数据绑定对不可见控件有效吗?这是winforms的.net问题,而不是asp.net。我有一个包含多个选项卡的表单。我在加载表单时为所有控件设置数据绑定。但我注意到第二个选项卡上控件的数据绑定不起作用。这些绑定仅在加载表单并选择第二个选项卡时才起作用。这使我产生疑问:数据绑定仅在绑定控件可见时才有效。谁能告诉我这是不是真的?测试这个并不难,但我想要一些确认。谢谢。你是对的。数据绑定控件在控件可见之前不会更新。目前我能找到的唯一参考是这个MSDN线程。您的问题与TabControl的行为有关。请参阅Microsoft错误报告。我发布了该问题的解决方法,在创建控件或创建句柄时将TabControl和“Iniatalizes”子类化到所有标签页。下面是解决方法的代码。publicpartialclassTabControl:System.Windows.Forms.TabControl{protectedoverridevoidOnHandleCreated(EventArgse_){base.OnHandleCreated(e_);foreach(System.Windows.Forms.TabPagetabPageinTabPages){InitializeTabPage(tabPage,true,Created);}}protectedoverridevoidOnControlAdded(ControlEventArgse_){base.OnControlAdded(e_);System.Windows.Forms.TabPagepage=e_.ControlasSystem.Windows.Forms.TabPage;if((page!=null)&&(page.Parent==this)&&(IsHandleCreated||Created)){InitializeTabPage(page,IsHandleCreated,Created);}}protectedoverridevoidOnCreateControl(){base.OnCreateControl();foreach(System.Windows.Forms.TabPagetabPageinTabPages){InitializeTabPage(tabPage,IsHandleCreated,true);}}//PRB:如果绑定控件位于具有未创建句柄的选项卡页上,则在Windows窗体数据绑定期间抛出异常//FIX:确保在创建tabcontrol时创建所有选项卡页。//https://连接.microsoft.com/VisualStudio/feedback/details/351177privatevoidInitializeTabPage(System.Windows.Forms.TabPagepage_,boolcreateHandle_,boolcreateControl_){if(!createControl_&&!createHandle_){返回;}if(createHandle_&&!page_.IsHandleCreated){IntPtrhandle=page_.Handle;}if(!page_.Created&&createControl_){返回;}boolvisible=page_.Visible;如果(!visible){page_.Visible=true;}page_.CreateControl();如果(!visible){page_.Visible=false;我们遇到了类似的问题我们试图写入2个绑定的不可见字段,以便我们可以更改写入数据集的格式。这在对象可见时工作正常,但在可见属性更改为false时停止工作。为了解决这个问题,我添加了以下代码://Stopourscreenflickering.chSplitContainer.Panel2.SuspendLayout();//使绑定字段可见,否则绑定不起作用。tbxValueCr.Visible=true;tbxValueDb.Visible=true;//更新这里的字段。//将设置恢复到原来的样子,所以你不知道我们在这里。tbxValueCr.Visible=false;tbxValueDb.Visible=false;chSplitContainer.Panel2.ResumeLayout();我自己也在为此苦苦挣扎,得出的结论是,除了显式子类化(参见hjb417的回答)之外,唯一的解决方案是使其他标签可见。在表单可见之前切换到另一个选项卡并返回到上一个选项卡不起作用。如果您不希望第二个选项卡可见,我使用以下代码作为解决方法:this.tabControl.SelectedTab=this.tabPageB;this.tabPageB.BindingContextChanged+=(objectsender,EventArgse)=>{this.tabContainerMain.SelectedTab=this.tabPageA;};假设tabPageA是可见选项卡,tabPageB是您要初始化的不可见选项卡。这将切换到pageB,并在数据绑定完成后切换回来。这在表单中对用户不可见。仍然是一个丑陋的hack,但至少这是有效的。当然,当您有多个选项卡时,他的代码会变得更难看。这不是我直接遇到的。但是,您可能会遇到BindingContext的问题。没有更多细节,很难说,但如果我是你,我会设置一个断点并确保控件都绑定到相同的上下文。根据答案,我制定了一个适合我的方法:publicpartialclassForm1:Form{privatevoidForm1_Load(objectsender,EventArgse){...forceBindTabs(tabControl1);}privatevoidforceBindTabs(TabControlctl){ctl.SuspendLayout();foreach(ctl.TabPages中的TabPage选项卡)tab.Visible=true;ctl.ResumeLayout();除了解决问题之外,选项卡在开始时加载并且在用户单击它们时显示得更快。以上是C#学习教程:数据绑定对不可见控件有效吗?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
