THirupathi V
THirupathi V

Reputation: 1

Unable to hide the control in WPF using MVVM

When i selected the values in combo box,i have to hide another control. I have write the code as shown in below. Please correct me where i made mistake in that.

View Code:

<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" />

ViewModel Code:

 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");
        }
    }

Where i have to correct? Please help me asap. Thanks in advance..

Upvotes: 0

Views: 408

Answers (1)

Joel Cochran
Joel Cochran

Reputation: 7738

There's not a whole lot to go on here. For instance, where are you setting IsButtonvisible based on your rule criteria? Here are some ideas:

1) Don't create a backing field for IsButtonVisible. Instead, have it return the correct analysis.

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

2) You can fire the Notify Propery Changed event from anywhere. In this case, you want the IsButtonVisible binding to be reevaluated every time the SelectedRuleName changes:

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

3) Is the SelectedRuleName really a DataTable? That would seem odd to me because it indicates multiple rows. It would be a longer post, but I would avoid DataTable altogether and change the ComboBox item source to an ObservableCollection. The "SelectedRuleName" would be of type T (not DataTable).

4) Along the same lines, I have found much greater success using SelectedItem instead of SelectedValue.

I hope some of this helps.

Upvotes: 1

Related Questions