WPF: просмотр списка с флажком и текстовым полем в одном столбце - PullRequest
2 голосов
/ 02 декабря 2009

Я хотел бы выполнить следующий просмотр списка, в котором используются разные элементы управления в одном столбце.

Имеет два столбца: Имя и Настройка. Первая запись в столбце «Имя» - «Вкл. / Выкл.», А «Настройка» - флажок. Имя второй строки - «Высота», а его настройкой является текстовое поле.

Я хочу, чтобы можно было программно заполнять список.

Спасибо!

Ответы [ 3 ]

5 голосов
/ 20 января 2010

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

XAML:

<Window x:Class="ListViewTest.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:ListViewTest"
    Height="300" Width="300">

    <Window.Resources>
        <DataTemplate x:Key="textBoxTemplate">
            <TextBox Text="{Binding Path=Value}" Width="100"></TextBox>
        </DataTemplate>

        <DataTemplate x:Key="checkBoxTemplate">
            <CheckBox IsChecked="{Binding Path=Value}" IsThreeState="False"></CheckBox>
        </DataTemplate>

        <local:SettingsTemplateSelector 
            x:Key="settingsTemplateSelector" 
            TextBoxTemplate="{StaticResource textBoxTemplate}" 
            CheckBoxTemplate="{StaticResource checkBoxTemplate}" />

    </Window.Resources>

    <ListView ItemsSource="{Binding Path=Settings}">
        <ListView.View>
            <GridView>
                <GridView.Columns>
                    <GridViewColumn 
                        Header="Name" 
                        DisplayMemberBinding="{Binding Path=Name}" />                          
                    <GridViewColumn 
                        Header="Setting" 
                        CellTemplateSelector="{StaticResource settingsTemplateSelector}" />
                </GridView.Columns>
            </GridView>
        </ListView.View>
    </ListView>

</Window>

Код:

using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;

namespace ListViewTest
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            Settings = new List<Setting>();
            Settings.Add(new Setting("On/Off", true));
            Settings.Add(new Setting("Elevation", "100"));

            DataContext = this;
        }

        public List<Setting> Settings { get; private set; }
    }

    public class Setting
    {
        public Setting(string name, string value)
        {
            Name = name;
            Value = value;
            IsCheckBox = false;
        }

        public Setting(string name, bool value)
        {
            Name = name;
            Value = value;
            IsCheckBox = true;
        }

        public string Name { get; private set; }
        public object Value { get; set; }
        public bool IsCheckBox { get; private set; }
    }

    public class SettingsTemplateSelector : DataTemplateSelector
    {
        public DataTemplate CheckBoxTemplate { get; set;}
        public DataTemplate TextBoxTemplate { get; set;}

        public override DataTemplate SelectTemplate(object item, DependencyObject container)
        {
            Setting setting = item as Setting;
            if (setting.IsCheckBox)
            {
                return CheckBoxTemplate;
            }
            return TextBoxTemplate;
        }
    }
}
0 голосов
/ 04 декабря 2009
<ListView Name="listView">
 <ListView.View>
     <GridView>
           <GridViewColumn  Header="Name">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=Name}" Width="Auto"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
             </GridViewColumn>
        <GridViewColumn  Header="Settings" >
            <GridViewColumn.CellTemplate>
                <DataTemplate>
                  <StackPanel>
                      <CheckBox Text="{Binding Path=CheckProperty}" Width="Auto" />
                       <TextBox Text="{Binding Path=TextProperty}" Width="Auto" />
                   </StackPanel>
                </DataTemplate>
            </GridViewColumn.CellTemplate>
        </GridViewColumn>
    </GridView>

 </ListView.View>

</ListView >

.. Сделать gridview как вид списка по умолчанию. и отдыхаем, используя шаблоны данных Gridviewcolumn ..

затем свяжите ваш источник данных ..

0 голосов
/ 02 декабря 2009

Пожалуйста, посмотрите пример ниже, он должен дать вам представление о том, как действовать

XAML

    <ListView x:Name="checkList" Height="100" Margin="129,168,187,43">
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Vertical">
                    <CheckBox Content="name" IsChecked="{Binding Checked, Mode=TwoWay}" />
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="Elevation" />
                        <TextBox Text="{Binding Text}" />
                    </StackPanel>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

Вы можете привязать его к списку объектов со свойствами Checked и Text. Ниже приведен пример:

        public class CheckBoxListItem
        {
            public bool Checked { get; set; }
            public string Text { get; set; }

            public CheckBoxListItem(bool ch, string text)
            {
                Checked = ch;
                Text = text;
            }
        }

<...>

List<CheckBoxListItem> items1 = new List<CheckBoxListItem>();
items1.Add(new CheckBoxListItem(true, "test1"));
items1.Add(new CheckBoxListItem(false, "test2"));
checkList.ItemsSource = items1;

надеюсь, это поможет, С уважением

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