Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Binding или DependencyProperty 
V
    Опции темы
DenWPF
Дата 18.8.2010, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



listbox привязываю через ItemSource - все нормально работает

а вот у checkBox надо менять чекед из класса 
Код

static ObservableCollection<BasketTheme> basketTheme = new ObservableCollection<BasketTheme>();


если id записи есть в этом классе то надо поставить галочку. 

как это реализовать???

я пока думаю как то через DependaceProperty хотя и не совсем уверен как.

Код

<ListBox Grid.Row="2" x:Name="list_category"  ItemsSource="{Binding Tables[0]}"  >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <GroupBox Header="Тема" Width="300" Height="325" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" x:Name="GroupBox">
                <DockPanel Tag="{Binding id}">
                    <Button Click="Button_Click" DockPanel.Dock="Top">
                        <Button.Content>
                            <DockPanel>
                                <TextBlock Text="{Binding title}" TextWrapping="Wrap" DockPanel.Dock="Top" Padding="5"  HorizontalAlignment="Center"  Foreground="#FFB51414" />
                            </DockPanel>
                        </Button.Content>
                    </Button>
                    <CheckBox DockPanel.Dock="Top" HorizontalAlignment="Center" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked" />
                </DockPanel>
            </GroupBox>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>


Это сообщение отредактировал(а) DenWPF - 18.8.2010, 13:35
PM MAIL   Вверх
Kefir
Дата 19.8.2010, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 22
Всего: 87



Делай или в самом BasketTheme проперти а-ля
Код

public bool HasId
{
  get { return Id != null; }
}


На проперти Id поднимай PropertyChanged("HasId") - тогда можно будет апдейтить чекбокс автоматом. Или же тот же DependencyProperty который сам всё шо надо поднимет и тоже автоматом обновит. В XAML, соответственно
Код

<CheckBox IsChecked="{Binding HasId, Mode=OneWay}"/>


OneWay потому что HasId ты сам поставить по сути не можешь.
PM MAIL WWW Skype   Вверх
DenWPF
Дата 19.8.2010, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



не понял что с hasid я не понял а как прописть что бы он брал данные из моего класса
PM MAIL   Вверх
Kefir
Дата 21.8.2010, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 22
Всего: 87



У тебя есть класс:
Код

class Person : INotifyPropertyChanged
{
    private int? _id;
    public int? Id 
    {
        get { return _id; }
        set
        {
            _id = value;
            NotifyPropertyChanged("Id");
            NotifyPropertyChanged("HasId");
        }
    }
    public string title { get; set; }

    // Делаем небольшое дополнение:
    public bool HasId
    {
        get { return Id != null; }
    }

    // это эвент интерфейса INotifyPropertyChanged
    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanget(string propertyName)
    {
        if(PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}

Теперь если ты привязываешь коллекцию этих элементов к листбоксу можешь ставить байндинг на чекбокс так:
Код

<ListBox Grid.Row="2" x:Name="list_category"  ItemsSource="{Binding Tables[0]}"  >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <CheckBox DockPanel.Dock="Top" HorizontalAlignment="Center" IsChecked={Binding HasId} />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>


Добавлено через 7 минут и 3 секунды
Кстати если добавлять в класс такое свойство не хочешь (к примеру если ты юзаешь сериализатор), то можно написать конвертер из int? в bool и использовать при привязке данных.

Смотри сюды smile

        
Код

public class NullableToBoolConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                return value != null;
            }

            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                return Binding.DoNothing;
            }
        }

И в коде XAML:
Код

<Window ...
    xmlns:converter="clr-namespace:СЮДА_ВПИСЫВАЕМ_НЕЙМСПЕЙС_КОНВЕРТЕРА">
<Window.Resources>
  <converter:NullableToBoolConverter x:Key="NullToBool"/>
</Window.Resources>

<ListBox Grid.Row="2" x:Name="list_category"  ItemsSource="{Binding Tables[0]}"  >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <CheckBox DockPanel.Dock="Top" HorizontalAlignment="Center" IsChecked="{Binding Id, Converter={StaticResource NullToBool}}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Тогда значение твоего Id (да и любой другой переменной) будет пропускаться через конвертер и будет выдавать значения bool.
PM MAIL WWW Skype   Вверх
DenWPF
Дата 22.8.2010, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



от точняк, про конверт и забыл.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0777 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.