2017-05-09 74 views
0

我正在開發一個應用程序,我需要從服務中提供一些選項並捕獲用戶對這些項目中的一些項目的選擇。爲了達到這個目的,我試着用SelectionMode =「Multiple」來使用ListView,但是我發現這種方法有些麻煩。UWP如何處理多個選擇

Application picture

在上圖中,當用戶選擇一個項目(從這裏,我將其稱爲「槽」)從左側面板,所選擇的槽的細節被示出在右側面板。我的問題來處理「處理類型」字段。正如你所看到的,一個插槽可能有許多處理類型。我需要雙向綁定ListView的SelectedItems屬性到我的ViewModel中的某個屬性,但這是不可能的(順便說一下,我遵循MVVM模式)。有一種方法可以從ViewModel中設置選定的項目,然後捕獲用戶可以返回到ViewModel的任何其他選擇(或取消選擇)。當然,我寧願一個簡單的解決方案,但在這一點上,任何建議,將不勝感激

+0

你有沒有考慮過使用ListView控件的SelectionChanged事件?從外觀上看,它看起來像一個selectionChanged事件任務。如果沒有,請您詳細說明或提供一個演示樣本應用程序或代碼或GIF或YouTubeVid,試圖實現您的目標?它可以幫助我們提供更好的解決方案 –

回答

0

我們不能將Binding分配到UWP中的只讀屬性SelectedItems

作爲一個工具,我們可以在類中定義IsSelected屬性,類應該繼承INotifyPropertyChanged。

類代碼:

public class Bundle : INotifyPropertyChanged 
{ 
    private string _name; 
    private bool _isSelected; 

    public string Name 
    { 
     get { return _name; } 
     set 
     { 
      _name = value; 
      RaisePropertyChanged("Name"); 
     } 
    } 

    public bool IsSelected 
    { 
     get { return _isSelected; } 
     set 
     { 
      _isSelected = value; 
      RaisePropertyChanged("IsSelected"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected void RaisePropertyChanged(string name) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(name)); 
     } 
    } 
} 

我們可以設置爲false,以使CheckBox將不會顯示的IsMultiSelectCheckBoxEnabled。然後我們可以在DataTemplate中添加一個CheckBox控件,然後我們可以將IsChecked屬性綁定到IsSelected

例如:

<ListView Name="MyListView" SelectionMode="Multiple" IsMultiSelectCheckBoxEnabled="False"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <CheckBox IsChecked="{Binding IsSelected,Mode=TwoWay}"></CheckBox> 
       <TextBlock Text="{Binding Name}" ></TextBlock> 
      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 
+0

這很好,雖然採用這種方法似乎不需要SelectionMode和IsMultiSelectCheckBoxEnabled屬性 – Wacho