Список с принадлежащими и не владеющими вещами для объекта - PullRequest
0 голосов
/ 01 июля 2010

У меня есть:

public class Extra
{
public string Name {get;set;}
}

, и у меня есть

public class CarViewModel
{
 public ObservableCollection<Extra> OwningExtras { get; set; }
public static IEnumerable<Extra> AllExtras
        {
            get
            {
                return Extra.GetAllExtras();
            }
        }
public CarViewModel()
{
owningExtras=Extra.GetAvailableExtrasForCar(idCar)
}
}

, и CarView выглядит так:

   <Grid >

        <ListBox ItemsSource="{Binding}" Name="lbExtras">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <CheckBox"/> //How implement adding and removing Extras
                        <TextBlock Text="{Binding Path=Name}" />
            </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

    </Grid>
</UserControl>

И мне интересночто подключиться к этому. DataContext?А затем, как заметить, что что-то изменилось (флажок означает, что у этого автомобиля есть этот дополнительный)

1 Ответ

1 голос
/ 02 июля 2010

Ниже кода будут отображаться все элементы коллекции AllExtras в списке и заполнены коллекции CheckedExtras элементами, которые проверены.Это только один из многих способов решить эту проблему.Не уверен, что вы имели в виду под «как заметить, что что-то изменилось».Вам нужно получать уведомление о том, что коллекция с отмеченными элементами обновлена?В этом случае вы можете вместо этого использовать ObservableCollection и прослушивать событие CollectionChanged.

XAML:

<Window x:Class="ListBoxTest.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300">
    <StackPanel>

        <ListBox ItemsSource="{Binding Path=AllExtras}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <CheckBox Click="OnCheckBoxClick" /> 
                        <TextBlock Text="{Binding Path=Name}" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

    </StackPanel>

</Window>

Код позади:

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

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

            DataContext = new VM();
        }

        private void OnCheckBoxClick(object sender, RoutedEventArgs e)
        {
            VM vm = DataContext as VM;
            CheckBox checkBox = sender as CheckBox;
            Extra extra = checkBox.DataContext as Extra;
            if (checkBox.IsChecked.GetValueOrDefault())
            {
                vm.CheckedExtras.Add(extra);
            }
            else
            {
                vm.CheckedExtras.Remove(extra);
            }
        }
    }

    public class VM
    {
        public VM()
        {
            CheckedExtras = new List<Extra>();
            AllExtras = new List<Extra>() { new Extra() { Name = "A" }, new Extra() { Name = "B" }, new Extra() { Name = "C" }, };
        }

        public List<Extra> CheckedExtras { get; private set; }
        public List<Extra> AllExtras { get; private set; }
    }

    public class Extra
    {
        public string Name { get; set; }
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...