Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
 combobox и скрытие для выбора некоторых его элементов?  [new]
AlexeiK
Member

Откуда:
Сообщений: 2859
народ, не могу победить ограничение выбора элементов комбобокса.
пробую самое элементарное visible свойство через конвертер меняю. так у меня в комбобоксе они не пропадают, а становятся высотой в 5 пикселей и их можно выбрать :(
и так с любым свойством, хоть ishittestvisible , там тоже можно выбрать , если мышкой щелкнуть под край границы элемента.

хотелось бы просто ограничить выбор элементов в зависимости от условия.
никто не знает как?
24 авг 10, 14:20    [9315265]     Ответить | Цитировать Сообщить модератору
 Re: combobox и скрытие для выбора некоторых его элементов?  [new]
AlexeiK
Member

Откуда:
Сообщений: 2859
ок. сделаю пост более интерактивным.
приложил файлик.
в нем убрана видимость элементов комбобокса. но при открытии его, видны контейнеры от элементов и их можно щелкать и все как быработает.

вот хотелось,чтобы исчезли элементы, а не так вот криво трансформировались.

К сообщению приложен файл (testcb.rar - 32Kb) cкачать
24 авг 10, 15:51    [9316388]     Ответить | Цитировать Сообщить модератору
 Re: combobox и скрытие для выбора некоторых его элементов?  [new]
JohnSparrow
Member

Откуда:
Сообщений: 365
Честно говоря, не совсем ясен вопрос. Если Вы хотите, чтобы в комбобоксе отображались не все элементы некоторого списка, а только их подмножество в зависимости от некоторого условия, то Вам нужно сделать вот так:
[SRC xml]
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Width="200" SizeToContent="Height">
<StackPanel>
<TextBox Text="{Binding Path=Start, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="0,0,0,10"/>
<ComboBox ItemsSource="{Binding Path=Items, UpdateSourceTrigger=PropertyChanged}" MinWidth="100" />
</StackPanel>
</Window>
[/SRC]
24 авг 10, 16:33    [9316833]     Ответить | Цитировать Сообщить модератору
 Re: combobox и скрытие для выбора некоторых его элементов?  [new]
JohnSparrow
Member

Откуда:
Сообщений: 365
Блин, случайно нажал кнопку "Опубликовать".
----

Честно говоря, не совсем ясен вопрос. Если Вы хотите, чтобы в комбобоксе отображались не все элементы некоторого списка, а только их подмножество в зависимости от некоторого условия, то Вам нужно сделать вот так:

MainWindow.xaml
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Width="200" SizeToContent="Height">
    <StackPanel>
        <TextBox Text="{Binding Path=Start, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="0,0,0,10"/>
        <ComboBox ItemsSource="{Binding Path=Items, UpdateSourceTrigger=PropertyChanged}" MinWidth="100" />
    </StackPanel>
</Window>

MainWindow.xaml.cs
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.DataContext = new MyData();
        }
    }

MyData.cs
    // модель данных
    public class MyData: INotifyPropertyChanged
    {
        #region INotifyPropertyChanged Members

        // Raised when a property on this object has a new value.
        public event PropertyChangedEventHandler PropertyChanged;

        // Raises this object's PropertyChanged event.
        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = this.PropertyChanged;
            if (handler != null)
            {
                var e = new PropertyChangedEventArgs(propertyName);
                handler(this, e);
            }
        }

        #endregion // INotifyPropertyChanged Members

        // полный (исходный) массив строк
        private string[] _names = new string[] {
                "Саша", "Петя", "Вася", "Ваня", "Маша", "Сеня", "Алена", "Андрей", "Алеша", "Паша", "Кеня", "Коля"
            };

        // массив строк - источник данных для комбобокса
        private string[] _items;
        public string[] Items
        {
            get { return _items; }
            private set 
            {
                _items = value;
                OnPropertyChanged("Items");
            }
        }

        // на основании этого свойства меняется источник данных для комбобокса
        private string _start;
        public string Start
        {
            get { return _start; }
            set 
            { 
                _start = value;
                OnPropertyChanged("Start");

                // вот здесь изменяем источник данных для комбобокса
                if(string.IsNullOrEmpty(Start))
                    Items = _names;
                else
                    Items = (from name in _names where name.StartsWith(_start) select name).ToArray(); 
            }
        }    

        // ctor
        public MyData()
        {
            // инициализируем свойства
            Start = "";
        }
    }
24 авг 10, 16:35    [9316851]     Ответить | Цитировать Сообщить модератору
 Re: combobox и скрытие для выбора некоторых его элементов?  [new]
AlexeiK
Member

Откуда:
Сообщений: 2859
JohnSparrow,

у меня этот комбобокс находится в гриде.
то есть там комбобоксом столько же , сколько и строк.
и каждый комбобокс с базовым одинаковым источником даных
и у каждого комбобокса он модифицирован
и вот я привел пример, модификация через visiblity оставляет, какието пустые прямоугольники :(
24 авг 10, 18:00    [9317691]     Ответить | Цитировать Сообщить модератору
 Re: combobox и скрытие для выбора некоторых его элементов?  [new]
aleks-sam
Member

Откуда: Krasnoyarsk
Сообщений: 1850
Я че то подобное делал через ListCollectionView используя его предикат Filter для ListBox'а. Посмотри, может и для комбика подойдет.
25 авг 10, 05:01    [9319270]     Ответить | Цитировать Сообщить модератору
 Re: combobox и скрытие для выбора некоторых его элементов?  [new]
JohnSparrow
Member

Откуда:
Сообщений: 365
AlexeiK, так или иначе, но фильтровать стоит источник данных комбобокса, а не скрывать какие-то элементы в при выводе в нем.
25 авг 10, 23:08    [9326288]     Ответить | Цитировать Сообщить модератору
 Re: combobox и скрытие для выбора некоторых его элементов?  [new]
eJack
Member

Откуда: Сибирь => Не резиновая
Сообщений: 826
AlexeiK,

Ну надо фильтровать источник данных - так правильно.
Хотя можно попробывать выставить в свойстве Visiblity значение Collapsed
26 авг 10, 05:55    [9326857]     Ответить | Цитировать Сообщить модератору
 Re: combobox и скрытие для выбора некоторых его элементов?  [new]
AlexeiK
Member

Откуда:
Сообщений: 2859
eJack,

автор
модификация через visiblity оставляет, какието пустые прямоугольники

видишь) я писал уже об этом. ставишь в collapsed и артефакаты получаю :(
26 авг 10, 11:24    [9328295]     Ответить | Цитировать Сообщить модератору
 Re: combobox и скрытие для выбора некоторых его элементов?  [new]
AlexeiK
Member

Откуда:
Сообщений: 2859
народ я забыл указать, что это Silverlight 3.
26 авг 10, 11:50    [9328613]     Ответить | Цитировать Сообщить модератору
 Re: combobox и скрытие для выбора некоторых его элементов?  [new]
AlexeiK
Member

Откуда:
Сообщений: 2859
ха! сделал.

 
Private _statsView As ICollectionView
  Dim i As New System.Windows.Data.CollectionViewSource

   i.Source = StatusList
   _statsView = i.View
   _statsView.Filter = New Predicate(Of Object)(AddressOf FilterLB)

<ComboBox x:Name="cbStats" ItemsSource="{Binding StatsView}" />

для будущих вопросов.
26 авг 10, 12:13    [9328844]     Ответить | Цитировать Сообщить модератору
Все форумы / WPF, Silverlight Ответить