Избегайте события Checked, которое будет запускаться, если для параметра установлено значение true - PullRequest
0 голосов
/ 21 февраля 2012

в моем приложении Silverlight, у меня есть флажок:

<CheckBox Content="Check me" Checked="CheckBox_Checked" IsChecked="{Binding IsChecked}" />

Свойство IsChecked привязано к свойству в моей модели просмотра:

    private bool isChecked;
    public bool IsChecked
    {
        get
        {
            return isChecked;
        }
        set
        {
            if (isChecked == value)
                return;

            isChecked = value;
            OnPropertyChanged(new PropertyChangedEventArgs("IsChecked"));
        }
    }

В моей модели просмотра у меня есть:

public MainPage()
{
    InitializeComponent();

    IsChecked = true;

    DataContext = this;
}

private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
    // IsChecked = true fired the event
}

Проблема в том, что проверенное событие происходит, хотя я устанавливаю значение IsChecked вручную. Это значение исходит из конфигурации и устанавливается как начальное значение и не должно запускать событие, которое делает бизнес ...

Как я могу избежать запуска этого события?

(это простой для воспроизведения пример, фактически событие связано с командой)

Заранее спасибо за любую помощь

Ответы [ 3 ]

3 голосов
/ 21 февраля 2012

Я бы подключил обработчик событий после инициализации:

<CheckBox x:Name="theCheckBox" Content="Check me" IsChecked="{Binding IsChecked}" />

public MainPage()
{
    InitializeComponent();

    IsChecked = true;

    DataContext = this;

    theCheckBox.Checked += CheckBox_Changed;
}
0 голосов
/ 13 июня 2012

У меня была та же проблема, и я решил ее, выполнив то, что предлагает Фил, но вместо этого на MainPage() я делаю это, когда флажок загружен.Это работает для меня.

0 голосов
/ 21 февраля 2012

Если бы я был вами, я бы по умолчанию закрытой переменной установил значение true, а в привязке установил FallbackValue = True, поэтому он имеет значение по умолчанию.Если это просто случай, когда вы не хотите, чтобы событие срабатывало, если для него когда-либо установлено значение true, не запускайте событие OnPropertyChanged, если «value = true».Но я думаю, что вам нужен первый вариант, просто значение по умолчанию для этой переменной, равное true, без запуска события.FallbackValue плюс таргетинг на частного участника, а не на публичную собственность, должен его сократить.

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