WPF Listview itemtemplate - PullRequest
       0

WPF Listview itemtemplate

0 голосов
/ 17 января 2019

У меня есть tabcontrol с вкладкой, в которой есть ListView, и я хотел бы отобразить созданный мной пользовательский элемент управления под названием «BetterCheckBox». Я связал его со свойством public List<Option> Options { get; set; }, которое после инициализации вручную добавил 3 параметра.

Вот мой XAML

<TabItem Header="Options">
    <ListView x:Name="lstOptions" ItemsSource="{Binding Options}">
        <ListView.ItemTemplate>
            <DataTemplate>
                 <Controls:BetterCheckBox Text="{Binding Name}" Description="{Binding Description}" />
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</TabItem>

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

Looks blank but has 3 selections

Для справки, я добавил свой элемент управления "BetterCheckBox" на вкладку местоположения, чтобы вы могли видеть, как это выглядит.

enter image description here

Мне было любопытно, поэтому я вместо этого поставил сетку, и я получил то, что ожидал.

enter image description here

В дополнение к этим тестам, чтобы попытаться выяснить, что не так, я также попробовал DataTemplates, которые использовали панели Wrap / Stack и TextBlocks, которые связывали эти свойства, и на них тоже были очень маленькие линии, такие же, как на первом скриншоте.

<TabItem Header="Options">
    <ListView x:Name="lstOptions" ItemsSource="{Binding Options}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <WrapPanel>
                    <TextBlock Text="Name: "/>
                    <TextBlock Text="{Binding Name}"/>
                    <TextBlock Text="Desc: "/>
                    <TextBlock Text="{Binding Description}"/>
                </WrapPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</TabItem>

Я что-то упустил? Я новичок в WPF и чувствую, что упускаю что-то очень простое, или, может быть, я не могу отобразить свой пользовательский контроль таким образом?

Редактировать - добавление usercontrol по запросу:

public partial class BetterCheckBox : UserControl, INotifyPropertyChanged
{
    public string Text { get => _text; set { _text = value; OnPropertyChanged("Text"); } }
    public string Description { get => _desc; set { _desc = value; OnPropertyChanged("Description"); } }
    public bool IsChecked { get => _isChecked; set { _isChecked = value; OnPropertyChanged("IsChecked"); } }

    public event PropertyChangedEventHandler PropertyChanged;

    private string _text = "Checkbox Text";
    private string _desc = "Default description";
    private bool _isChecked = false;

    public BetterCheckBox()
    {
        InitializeComponent();
        DataContext = this;
    }

    private void OnPropertyChanged(string name)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
    }
}

Использование DependencyProperty

public partial class BetterCheckBox : UserControl
{
    public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
        "Text", typeof(string), typeof(BetterCheckBox), new PropertyMetadata("Default title")
        );

    public static readonly DependencyProperty DescriptionProperty = DependencyProperty.Register(
        "Description", typeof(string), typeof(BetterCheckBox), new PropertyMetadata("Default description")
        );

    public static readonly DependencyProperty IsCheckedProperty = DependencyProperty.Register(
        "IsChecked", typeof(bool), typeof(BetterCheckBox), new PropertyMetadata(false)
        );

    public string Text { get => (string)GetValue(TextProperty); set => SetValue(TextProperty, value); }
    public string Description { get => (string)GetValue(DescriptionProperty); set => SetValue(DescriptionProperty, value); }
    public string IsChecked { get => (string)GetValue(IsCheckedProperty); set => SetValue(IsCheckedProperty, value); }

    public BetterCheckBox()
    {
        InitializeComponent();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...