2011-12-09 115 views
3

我有一个应用程序,我正在处理,并需要基于下拉列表中选定的值显示/隐藏控件。默认情况下,大多数控件都将隐藏,并且当从控制设备控件中选择一个值(“VFD”)时,隐藏控件将变为可见。基于下拉列表值显示/隐藏控件

我有一个实体名称MCCLoads,它与驱动下拉列表的所有其他实体有关系。

,我想申请此功能被命名为MCCLoadsSetListDetail

屏幕

我尝试使用这段代码,但我不知道这是去

public void MCCLoadsSetListDetail_SelectionChanged() 
    { 
     this.FindControl("CTRL_DEVICE").IsEnabled = true; 

     if (this.MCCLoadsSetListDetail.SelectedItem.Loads_CTRL_Device == "VFD") 
     { 
      this.FindControl("Line_Reactor_IMP").IsVisible = false; 
     } 
    } 
的正确方法

MCC Loads Form MCC Loads Table with relationships

在此先感谢,杰森

+0

我相信我会在那种情况下也做了同样的事情。它只是不觉得我们只能通过FindControl访问控件。 –

回答

3

在您的屏幕的创建方法内部订阅ControlAvailable事件。当这种情况发生时,您可以将Silverlight控件强制转换为Windows控件以订阅SelectionChanged事件。然后,您可以对此作出回应,你想......

partial void YourScreen_Created() 
{ 
    this.FindControl("YourDropDown").ControlAvailable += new EventHandler<ControlAvailableEventArgs>(YourDropDown_ControlAvailable); 
} 

void YourDropDown_ControlAvailable(object sender, ControlAvailableEventArgs e) 
{ 
    var ctrl = e.Control as AutoCompleteBox; 
    ctrl.SelectionChanged += new SelectionChangedEventHandler(ctrl_SelectionChanged); 
} 

void ctrl_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    dynamic selectedItem = (sender as AutoCompleteBox).SelectedItem; 
    if (selectedItem == null) 
    { 
     return; 
    } 

    // Your logic goes here.... 
    this.FindControl("CTRL_DEVICE").IsEnabled = true; 
    if (selectedItem.StringValue == "VFD") 
    { 
     this.FindControl("Line_Reactor_IMP").IsVisible = false; 
    } 
} 

希望这有助于...

+0

很棒的答案。解决了我的问题!对于感兴趣的读者:selectedItem.Value将为您提供所选数据绑定项的引用。 HansjörgReister – user2738103

相关问题