none
[UWP] Gridview mit CollectionViewSource und grouping, ComboBox und SelectionChanged.. RRS feed

  • Frage

  • Hallo Community,
    ich arbeite an einer UWP mit einem Gridview, welches per CollectionViewSource an eine ObservableCollection

    public ObservableCollection<MatchGroupModel> GroupedMusicList { get; private set; }

    gebunden ist. Der Inhalt ist gruppiert.

    public class MatchGroupModel : ModelGroupBase<MatchModel>
    {
    }
    
    public class MatchModel : ViewModelBase
    {
    	private string name;
    	public string Name
    	{
    		get { return name; }
    		set { Set(ref name, value); }
    	}
    
    	private ComboBoxItem selectedBestOf;
    	public ComboBoxItem SelectedBestOf
    	{
    		get { return selectedBestOf; }
    		set { Set(ref selectedBestOf, value); }
    	}
    ...
    ...hier gibt's noch viele Props...
    ...
    }

    In der Page gibt es diese Objekte:

    <CollectionViewSource
    	x:Name="GroupedMusicListSource"
    	IsSourceGrouped="True"
    	ItemsPath="Items"
    	Source="{x:Bind ViewModel.GroupedMusicList}" />
    
    
    <GridView
    	ItemsSource="{Binding Source={StaticResource GroupedMusicListSource}, Mode=TwoWay}"
    	SelectedItem="{Binding Path=SelectedMatch, Mode=TwoWay}"
    	SelectionMode="Single">
    	<GridView.GroupStyle>
    		<GroupStyle HidesIfEmpty="True">
    			<GroupStyle.HeaderTemplate>
    				<DataTemplate x:DataType="models:MatchGroupModel">
    					...
    					...
    				</DataTemplate>
    			</GroupStyle.HeaderTemplate>
    		</GroupStyle>
    	</GridView.GroupStyle>
    	<GridView.ItemTemplate>
    		<DataTemplate x:DataType="models:MatchModel">
    			<StackPanel>
    				<StackPanel Padding="5" HorizontalAlignment="Center">
    					...
    					...
    					<StackPanel Orientation="Horizontal">
    					...
    					...
    						<ComboBox
    							Margin="5,0,0,0"
    							SelectedItem ="{x:Bind SelectedBestOf, Mode=TwoWay, Converter={StaticResource ComboBoxItemConvert}}"
    							Visibility = "{Binding Path=ShowSelectedBestOf, Converter={StaticResource BooleanToVisibilityConverter}}">
    							<ComboBoxItem>1</ComboBoxItem>
    							<ComboBoxItem>3</ComboBoxItem>
    							...
    							...
    							<ComboBoxItem>∞</ComboBoxItem>
    						</ComboBox>
    					...
    					...
    Im ViewModel gibt es noch folgendes Property:

    private MatchModel selectedMatch = new MatchModel();
    public MatchModel SelectedMatch
    {
    	get { return selectedMatch; }
    	set { Set(ref selectedMatch, value); }
    }

    Nun zum Problem:

    Wenn ich ein Item im GridView selektiere, bekomme ich das im Viewmodel mit, alles gut. Wenn ich allerdings einen Eintrag in der ComboBox selektiere, wird nix gefeuert..
    Aber genau das benötige ich.

    Ich hoffe, ich habe ausreichend Code-Ausschnitte geliefert, um mein Problem deutlich zu machen.
    Eins noch; als Basis für's MVVM nutze ich "MyToolKit", welches INotifyPropertyChanged usw. implementiert..
    Was mich zu noch einer Frage am Rande bringt: Was nutzt ihr? Irgendwelche ToolKits (MyToolKit, WinUX, MVVMlite...) oder alles aus eigener Hand?

    Danke, Gruß

    Freitag, 30. September 2016 12:47

Antworten

  • Eine mögliche Lösung:

    private MatchModel selectedMatch = new MatchModel();
    public MatchModel SelectedMatch
    {
    	get { return selectedMatch; }
    	set 
    { 
    Set(ref selectedMatch, value); 
    SelectedMatch.PropertyChanged += OnSelectedBestOfChangedEvent;
    }
    }

    ...und...

    private void OnSelectedBestOfChangedEvent(object sender, System.ComponentModel.PropertyChangedEventArgs e)
    {
    //...my stuff
    }

    Vielleicht nicht sehr schön, aber erstmal ausreichend...

    Hat noch jemand eine elegantere Lösung?

    Freitag, 30. September 2016 21:22