2017-05-09 17 views
0

私はサービスからいくつかのオプションを提示し、これらのアイテムのいくつかの選択をユーザから取得する必要があるアプリケーションを開発しています。これを実現するために、ListViewをSelectionMode = "Multiple"で使用しようとしましたが、このアプローチではいくつか問題が見つかりました。上記画像にUWP複数の選択肢を扱う方法

Application picture

ユーザが左側のパネルから項目を(ここから私は「スロット」と呼んであろう)を選択する場合、選択されたスロットの詳細は右のパネルに示されています。私の問題は、 "ハンドリングタイプ"フィールドを扱うことになります。ご覧のとおり、スロットには多くの処理タイプがあります。 ListViewのSelectedItemsプロパティをViewModelのいくつかのプロパティに双方向バインドする必要がありますが、これはできません(ところで、私はMVVMパターンに従っています)。 ViewModelから選択したアイテムを設定し、ユーザがViewModelに戻すことができる他の選択(または選択解除)を取得する方法があります。もちろん、わかりやすい解決策を好むでしょうが、この時点ではどんな提案も評価されます

+0

あなたは、リストビューのSelectionChangedイベントを使用して考えがありますか?その外観から、それはselectionChangedイベントタスクのように見えます。そうでない場合は、デモサンプルアプリや何かコードやGIF、またはあなたが達成しようとしているもののYouTubeVidを詳しく教えてもらえますか? –

答えて

0

BindingをUWPの読み取り専用プロパティSelectedItemsに割り当てることはできません。

wrokaroundとして、クラスに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)); 
     } 
    } 
} 

我々はCheckBoxは表示されませんことをIsMultiSelectCheckBoxEnabled falseに設定することができます。次に、DataTemplateCheckBoxコントロールを追加して、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

関連する問題