Флажок Threestate начальная привязка Windows Store App / RT

мой флажок не привязывает правильно начальное значение при запуске:

<CheckBox IsThreeState="True" IsChecked="{Binding StartWithSettings,Mode=TwoWay}"/>

Флажок отображается пустым при запуске, но должен быть обнулен (поле с черным квадратом внутри).

Getter правильно поднимается с нулевым значением при запуске, что мне не хватает?

РЕДАКТИРОВАТЬ:

Ниже вы можете найти мою модель просмотра, код модели и кнопку для переключения всех трех состояний флажка. странная вещь происходит при переключении между нулевым состоянием и ложным состоянием -> он всегда показывает ложный флажок, независимо от того, является ли он нулевым или ложным, но базовые данные верны.

Я могу переключить состояние флажка напрямую, щелкнув сам флажок, все три состояния отображаются правильно.

Это приложение для магазина Windows 8.1, возможно, флажок wpf отличается от "обычного" флажка wpf и содержит ошибку?

фрагмент viewmodel:

public bool? StartWithSettings
{
    get
    {
        return _configurationModel.MyAppModel.StartWithSettings;
    }
    set
    {
        _configurationModel.MyAppModel.StartWithSettings = value;
        RaisePropertyChangedEvent("StartWithSettings");
    }
}

фрагмент модели

public class MyAppModel
{
    public bool? StartWithSettings { get; set; }

    public MyAppModel()
    {
        this.StartWithSettings = null;
    }
}

фрагмент тестового кода

private void ChangeCheckboxState()
{
    if (StartWithSettings == null)
    {
        StartWithSettings = true;
        return;
    }
    else if (StartWithSettings == true)
    {
        StartWithSettings = false;
        return;
    }
    else
        StartWithSettings = null;

}

person tronc    schedule 23.09.2014    source источник
comment
Какой тип StartWithSettings? Это bool или bool?? Он будет принимать значение из вашего свойства, и если оно не допускает значения NULL, и вы не устанавливаете его, то по умолчанию, если будет false   -  person dkozl    schedule 23.09.2014
comment
это булево? в модели и во вьюмодели   -  person tronc    schedule 23.09.2014
comment
когда я тестирую модель на ее значение, она имеет нулевое значение, как и должно быть, но презентация не соответствует ее значению   -  person tronc    schedule 23.09.2014
comment
Вы подтвердили, что привязка работает? Если вы отметите / снимите отметку, обновляется ли модель представления? Какие-то ошибки привязки в окне вывода?   -  person dkozl    schedule 23.09.2014
comment
да, привязка работает нормально.   -  person tronc    schedule 23.09.2014
comment
странная вещь: я инициализирую элемент управления без привязки с помощью IsChecked = {x: Null}, дизайнер правильно отображает флажок в нулевом состоянии. После запуска приложения поле снова находится в состоянии «ложь».   -  person tronc    schedule 23.09.2014
comment
Нет ли в коде ничего, что могло бы повлиять на состояние этого CheckBox?   -  person dkozl    schedule 23.09.2014
comment
нет, абсолютно стандартный проект mvvm на ранней стадии, в нем нет супер навороченного кода;)   -  person tronc    schedule 23.09.2014
comment
привязка с обычным двоичным флажком работает нормально   -  person tronc    schedule 23.09.2014
comment
я добавил дополнительную информацию + код   -  person tronc    schedule 24.09.2014
comment
Ответьте здесь: stackoverflow.com/a/24070465/4905310   -  person Gabriel Rainha    schedule 16.11.2015


Ответы (1)


Поддерживающее свойство, связанное со свойством, должно иметь тип bool?, чтобы поддерживать флажок 3 состояния. Убедитесь, что для поля поддержки установлено значение NULL.

Кроме того, вам не нужно устанавливать IsThreeState="True"

РЕДАКТИРОВАТЬ: поскольку вы упомянули Windows 8.1, и я предполагаю, что это будет WinRT.

Типы, допускающие значение NULL, не поддерживаются в WinRT / Win8 Dev.

Решение можно найти здесь < / а>

person 123 456 789 0    schedule 23.09.2014
comment
Могу заверить, что эти условия выполняются. - person tronc; 24.09.2014
comment
Мне сложно понять, как ваш совет может быть интегрирован в мое решение, поскольку я не использую свойства зависимостей. пожалуйста, не могли бы вы объяснить более подробно, как я могу реализовать ваше решение? - person tronc; 25.09.2014
comment
@tronc Вы должны использовать свойства зависимостей, если хотите, чтобы в Win8 dev было привязано три состояния. - person 123 456 789 0; 02.10.2014