WPF CheckBox не проверяется при инициализации (привязка данных) - PullRequest
0 голосов
/ 26 ноября 2009

Я только что столкнулся с этой проблемой с моим CheckBox связыванием данных. Сценарий:

Когда я инициализирую пользовательский интерфейс (запускаю приложение), CheckBox не проверяются, хотя свойство, к которому они привязаны, имеет значение true. Когда я нажимаю CheckBox, для свойства устанавливается значение false, но CheckBox по-прежнему отображается как непроверенное. Отныне привязка данных работает должным образом, и CheckBox правильно синхронизируется со свойством привязки.

Вот мой код XAML:

<ItemsControl ItemsSource="{Binding Path=DisplayTypes}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate DataType="{x:Type Presentation:TypeDisplayPair}">
            <CheckBox IsChecked="{Binding Display}" Margin="3">
                <TextBlock Text="{Binding Type}" Foreground="{Binding Color}" />
            </CheckBox>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

И на мой взгляд модель:

public class TypeDisplayPair : BaseViewModel
{
    private bool display;
    private readonly Brush color;

    public TypeDisplayPair(string type, bool display)
    {
        Display = display;
        Type = type;
        color = BrushGenerator.GetRandomSolidColorBrush();
    }

    public string Type { get; set; }

    public bool Display
    {
        get { return display; }
        set
        {
            display = value;
            this.FirePropertyChanged(x => x.Display);
        }
    }

    public Brush Color
    {
        get { return color; }
    }
}

Любые предложения приветствуются, так как я потратил слишком много времени на его отладку и у меня закончились идеи.

1 Ответ

2 голосов
/ 26 ноября 2009

Код, который вы указали, совершенно правильный, проблема инициализации, вероятно, связана с тем, как вы назначаете DataContext. Я пробовал следующее:

    public Window1()
    {
        DataContext = this;
        DisplayTypes = new ObservableCollection<TypeDisplayPair>()
        {
            new TypeDisplayPair("Alpha", true),
            new TypeDisplayPair("Beta", false)
        };

        InitializeComponent();
    }

и работает как положено.

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