Проблема: флажок WPF внутри списка отключен, но все еще активен - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть стиль для списка, используя флажки. Я хочу связать свойство isEnabled каждого флажка со свойством (ItemEnabled) каждого элемента. Это мой код:

<Setter Property="ItemContainerStyle">
            <Setter.Value>
                <Style TargetType="{x:Type ListBoxItem}" >
                    <Setter Property="Margin" Value="2" />                    
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type ListBoxItem}">
                                <CheckBox Focusable="False"                                    
                                    IsChecked="{Binding Path=IsSelected, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent} }"
                                    IsEnabled="{Binding Path=ItemEnabled, Mode=OneWay}">
                                    <ContentPresenter></ContentPresenter>
                                </CheckBox>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </Setter.Value>
        </Setter>

Пока флажки, для которых свойство ItemEnabled имеет значение false, недоступны. Тем не менее, по-прежнему кликабельный и проверяемый / не проверяемый. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Спасибо, РаджН. Мне удалось решить это на основе вашего комментария. Вот новый XAML:

<Setter Property="ItemContainerStyle">
        <Setter.Value>
            <Style TargetType="{x:Type ListBoxItem}" >
                <Setter Property="Margin" Value="2" />
                <Setter Property="Focusable" Value="False" />
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ListBoxItem}">
                            <ContentPresenter></ContentPresenter>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Setter Property="ContentTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <CheckBox Focusable="False"
                                      IsChecked="{Binding Path=IsSelected, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=ListBoxItem} }"
                                      IsEnabled="{Binding Path=ItemEnabled, Mode=OneWay}"
                                      Content="{Binding Path=ItemName, Mode=OneWay}">
                            </CheckBox>
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Setter.Value>
    </Setter>
0 голосов
/ 16 ноября 2018

Если я правильно понимаю ваш вопрос, вы хотите установить флажок «IsEnabled», управляемый с помощью модели, «IsChecked», контролируемый выбором списка.

Вы можете сделать это, просто создав DataTemplate для вашей модели

<DataTemplate DataType="{x:Type local:TestModel}">
    <StackPanel Orientation="Horizontal">
        <CheckBox IsEnabled="{Binding ItemEnabled}"
            IsChecked="{Binding RelativeSource={RelativeSource AncestorType=ListViewItem},Path=IsSelected}"
                  ></CheckBox>
        <TextBlock Text="{Binding Name}"></TextBlock>
    </StackPanel>
</DataTemplate>

TestModel:

public class Emp
{
    public int ID { get; set; }
    public string Name { get; set; }
    public bool ItemEnabled { get; set; }
}

Удалите ItemContainerStyle из вашего кода.

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

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