无法使用MVVM隐藏WPF中的控件

时间:2011-07-04 06:41:06

标签: wpf mvvm

当我在组合框中选择值时,我必须隐藏另一个控件。我已经编写了如下所示的代码。请纠正我错误的地方。

查看代码:

<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代码:

 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 个答案:

答案 0 :(得分:1)

这里没有太多可以继续下去。例如,您根据规则标准在哪里设置IsButtonvisible?以下是一些想法:

1)不要为IsButtonVisible创建支持字段。相反,让它返回正确的分析。

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

2)您可以从任何地方触发Notify Propery Changed事件。在这种情况下,您希望每次SelectedRuleName更改时都重新评估IsButtonVisible绑定:

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

3)SelectedRuleName真的是DataTable吗?这对我来说似乎很奇怪,因为它表示多行。这将是一个更长的帖子,但我会完全避免使用DataTable并将ComboBox项目源更改为ObservableCollection。 “SelectedRuleName”的类型为T(不是DataTable)。

4)同样,我使用SelectedItem而不是SelectedValue取得了更大的成功。

我希望其中一些有帮助。