2011-07-04 6 views
0

콤보 상자에서 값을 선택하면 다른 컨트롤을 숨겨야합니다. 나는 아래와 같이 코드를 작성했다. 내가 실수 한 부분을 바로 잡아주세요.MVVM을 사용하여 WPF에서 컨트롤을 숨길 수 없습니다.

보기 코드 :

<ComboBox x:Name="cboShowRuleWhere" Height="20" Width="200" ItemsSource="{Binding Source={StaticResource listedView}, Path=FilterRules}" DisplayMemberPath="RuleName" SelectedValuePath="RuleId" SelectedValue="{Binding Source={StaticResource listedView}, Path=SelectedRuleName, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" ></ComboBox> 
<ComboBox Height="21" HorizontalAlignment="Left" Margin="6,4,0,0" x:Name="cboRuleCondtion" Visibility="{Binding Path=IsButtonVisible,Converter={StaticResource BoolToVisible}}" VerticalAlignment="Top" Width="212" /> 

뷰 모델 번호 : 난이

private DataTable m_selectedRuleName; 
    public DataTable SelectedRuleName 
    { 
     get 
     { 
      return m_selectedRuleName; 
     } 
     set 
     { 
      m_selectedRuleName = value; 
      base.RaisePropertyChangedEvent("SelectedRuleName"); 
     } 
    } 


    private bool _IsButtonVisible; 
    public bool IsButtonVisible 
    { 
     get { return _IsButtonVisible; } 
     set 
     { 
      _IsButtonVisible = value; 
      base.RaisePropertyChangedEvent("IsButtonVisible"); 
     } 
    } 

은 수정할? 제발 빨리 도와주세요. 미리 감사드립니다.

답변

1

여기에 갈 많은 것이 없습니다. 예를 들어, 규칙 기준에 따라 IsButtonvisible을 어디에 설정합니까? 다음은 몇 가지 아이디어입니다.

1) IsButtonVisible에 대한 배경 필드를 만들지 마십시오. 대신 올바른 분석을 반환하십시오.

public bool IsButtonVisible { get { return SelectedRuleName == "IsVisibleRule"; } } 

2) 어디에서나 변경 사항 알림 변경 이벤트를 실행할 수 있습니다. SelectedRuleName 정말)

private DataTable m_selectedRuleName; 
public DataTable SelectedRuleName 
{ 
    get 
    { 
     return m_selectedRuleName; 
    } 
    set 
    { 
     m_selectedRuleName = value; 
     base.RaisePropertyChangedEvent("SelectedRuleName"); 
     base.RaisePropertyChangedEvent("IsButtonVisible"); 
    } 
} 

3 DataTable에 있습니다 :이 경우, 당신이 원하는 IsButtonVisible 때마다에게 SelectedRuleName 변경을 재평가하는 바인딩? 그것은 여러 행을 나타 내기 때문에 이상하게 보일 것입니다. 그것은 더 긴 게시물이지만, 나는 DataTable을 완전히 피하고 ComboBox 아이템 소스를 ObservableCollection으로 바꿀 것입니다. "SelectedRuleName"은 T (DataTable 아님) 유형입니다.

4) 동일한 행을 따라 SelectedValue 대신 SelectedItem을 사용하여 훨씬 더 큰 성공을 거두었습니다.

일부 도움이 되었기를 바랍니다.

+0

저는 잠시 그 ​​사실을 알고 있습니다. 그리고 물어 보는 사람은 당신의 응답을 결코 보지 못했을 것입니다. – JoeB

+0

도움이 되니 기뻐요 :-) –

관련 문제