Невозможно скрыть элемент управления в WPF с использованием MVVM - PullRequest
0 голосов
/ 04 июля 2011

Когда я выбрал значения в поле со списком, я должен скрыть другой элемент управления.Я написал код, как показано ниже.Пожалуйста, исправьте меня, где я допустил ошибку.

Просмотр кода:

<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 Ответ

1 голос
/ 04 июля 2011

Здесь не так много всего.Например, где вы устанавливаете IsButtonvisible на основе ваших критериев правила?Вот несколько идей:

1) Не создавайте вспомогательное поле для IsButtonVisible.Вместо этого пусть он вернет правильный анализ.

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

2) Вы можете запустить событие Notify Propery Changed из любого места.В этом случае вы хотите, чтобы привязка IsButtonVisible переоценивалась при каждом изменении SelectedRuleName:

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

3) Является ли SelectedRuleName действительно таблицей данных?Мне показалось бы странным, потому что это указывает на несколько строк.Это было бы более длинное сообщение, но я бы вообще избегал DataTable и изменил бы источник элемента ComboBox на ObservableCollection.«SelectedRuleName» будет иметь тип T (не DataTable).

4) В том же духе я нашел гораздо больший успех при использовании SelectedItem вместо SelectedValue.

Надеюсь, что это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...