Caliburn микро-список множественный выбор MVVM - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть ListBox, содержащий имя.Теперь мне нужно выбрать несколько элементов из ListBox.

ViewModel.CS

private Person selectedListOfPeople_;
public Person SelectedListOfPeople
{
  get
  { return selectedListOfPeople_;}
  set
  { this.SetProperty(ref selectedListOfPeople_, value, nameof(SelectedListOfPeople));}
}

private ObservableCollection<Person> listOfPeople_;
public ObservableCollection<Person> ListOfPeople
{
  get { return listOfPeople_; }
  set
  {
    this.SetProperty(ref listOfPeople_, value, nameof(ListOfPeople));
  }
}

public ShellViewModel()
{
  ListOfPeople = new ObservableCollection<Person>
  {
    new Person("ABC"),new Person("DEF"),new Person("GHI"),new Person("JKL")
  };
}


public class Person : Screen
{
  private string personName_;
  public string PersonName
  {
    get { return personName_; }
    set { this.SetProperty(ref personName_, value, nameof(PersonName)); }
  }

  public Person(string personName)
  {
    PersonName = personName;
  }

  private bool isSelected_;
  public bool IsSelected
  {
    get { return isSelected_; }
    set { this.SetProperty(ref isSelected_, value, nameof(IsSelected)); }
  }
}

View.XAML

<Grid Width="500" Height="500" Background="LightBlue">
    <ListBox x:Name="ListOfPeople" SelectionMode="Multiple" Height="300" Width="300" Margin="120,100,80,100">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding PersonName}" />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ListBox>

в этом SelectedListOfPeople не вызывается, когда 2-й элемент выбран в ListBox, установленном на Множественный выбор , как я могу убедиться, что это событие возникает каждый раз, когда пользователь делает выбор в ListBox.Заранее спасибо.

1 Ответ

0 голосов
/ 23 сентября 2018

Один из способов сделать это - отказаться от соглашения, доступного в этой платформе, и связать свойство вручную.

Но сначала вам нужно обновить свойство для множественного выбора в модели представления

private ObservableCollection<Person> selectedListOfPeople;
public ObservableCollection<Person> SelectedListOfPeople {
    get { return selectedListOfPeople; }
    set { this.SetProperty(ref selectedListOfPeople, value, nameof(SelectedListOfPeople)); }
}

private ObservableCollection<Person> listOfPeople;
public ObservableCollection<Person> ListOfPeople {
    get { return listOfPeople; }
    set { this.SetProperty(ref listOfPeople, value, nameof(ListOfPeople)); }
}

public ShellViewModel() {
    ListOfPeople = new ObservableCollection<Person> {
        new Person("ABC"),
        new Person("DEF"),
        new Person("GHI"),
        new Person("JKL")
    };
    SelectedListOfPeople = new ObservableCollection<Person>();
}

И затем привязать к желаемому свойству в представлении XAML

<ListBox x:Name="ListOfPeople" SelectionMode="Multiple" 
        Height="300" Width="300" Margin="120,100,80,100"
        SelectedItems = "{Bining SelectedListOfPeople}"
    >
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding PersonName}" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ListBox>

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

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