2016-09-13 7 views
0

바인딩 아이에 따라 부모 수집을 업데이트 : 다음 두 번째 항목 컬렉션이내가 ItemsControl에 바인딩 한 항목의 모음이 UWP

<ItemsControl ItemsSource="{Binding ProductCategories, Mode=TwoWay}"> 
                <ItemsControl.ItemTemplate> 
                    <DataTemplate> 
                        <ToggleButton IsChecked="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> 
                            <TextBlock Text="{Binding CategoryName}"/> 
                        </ToggleButton> 

을하는 내보기 모델, 위의 컬렉션에 의존하는 쿼리를 기반으로합니다.

내 요구 사항은 위의 범주를 기반으로 제품 목록을 필터링하는 것입니다. 문제는 위의 바인딩이 ProductCategory에 있다는 것입니다. 따라서 ProductCategory의 'IsSelected'속성에 대해 세트가 올바르게 실행되는 동안 'ProductCategories'가 변경되었음을 알리지 않습니다.

ProductCategories는 다음과 같이 정의된다

public class ProductCategories : ObservableCollection<ProductCategory> 

내 첫번째 생각 나는 DataTrigger를 사용하여이를 달성 할 수 있었다; 그러나 WinRT 이후에는 사용할 수없는 것 같습니다. 이것에 대해 어떤 종류의 메시지 알림을 사용할 수도 있지만 이것이 XAML 바인딩에서 직접 달성 할 수 있어야한다고 생각합니다.

내 질문은 자식 클래스가 변경되면 부모 클래스가 변경되었다는 알림을 발생시킬 수 있는지 여부입니다.

답변

0

그래서 다른 컬렉션 (ProductCategories)에서 선택한 항목으로 하나의 컬렉션 (제품?)을 필터링하려고합니까?

그렇다면이 점을 약간 생각하는 것 같습니다. ProductCategory 클래스에서 'IsSelected'개념을 제거하십시오. 이는 디스플레이 관련이며 모델에 속하지 않으므로 제거하십시오. 그런 다음 ProductCategories ItemsControl을 ListBox로 변경하고 LsitBox.SelectedItem을보기 모델의 'SelectedProductCategory'속성에 바인딩합니다 (Mode=TwoWay, UpdateSourceTrigger=PropertyChanged). 사용자가 ListBox에서 항목을 선택하면 'SelectedProductCategory'설정자가 호출되며 두 번째 모음을 필터링 할 수 있습니다. 모음이 변경 알림을 지원하지 않으면 PropertyChanged를 호출하는 것을 기억하십시오.

희망이 있습니다.