虽然这个问题似乎被问了很多次,但我似乎找不到正确的解决方案,或者把各个部分放在一起来解决这个问题。
我CollectionView
在集合视图中有一个 with Bindable.Stacklayout
。
嵌套的 Stacklayout 包含一个Checkbox
,并且该复选框的可见性由父列表(CollectionView)数据源的属性设置。
这最初在加载时可以正常工作,但是,一旦父属性更改(它还处理嵌套堆栈布局的可见性),那么嵌套堆栈布局的 UI 就不会更新。问题是,我怎样才能做到这一点?
XAML:
<CollectionView
ItemsSource="{Binding RoomsData}"
SelectionMode="None">
<CollectionView.ItemTemplate>
<DataTemplate>
<xct:Expander
x:Name="RoomExpander"
IsExpanded="{Binding IsExpanded}">
<xct:Expander.Header>
<! -- omitted code -->
</xct:Expander.Header>
<xct:Expander.Content>
<StackLayout
BindableLayout.ItemsSource="{Binding Elements}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Grid>
<!-- omitted / simplified code a bit for readability -->
<CheckBox IsVisible="{Binding RoomsData.ElementsVisible}" />
</Grid>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</xct:Expander.Content>
</xct:Expander>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
楷模):
// Main datasource
public IList<RoomModel> RoomsData
{
get { return _roomsData; }
set { SetProperty(ref _roomsData, value); }
}
public class RoomModel : ObservableObject
{
// Other properties omitted..
private bool _elementsVisible;
public bool ElementsVisible
{
get { return _elementsVisible; }
set { SetProperty(ref _elementsVisible, value); }
}
public IList<ElementModel> Elements { get; set; }
}
public class ElementModel : ObservableObject
{
// Other properties omitted..
}
* SetProperty 包含 NotifyPropertyChanged 逻辑
在某个时刻,ElementsVisible
属性从 false 变为 true 或反之亦然,然后我希望嵌套堆栈布局的复选框改变可见性,但没有任何反应。我应该通知Elements
嵌套数据源来实现这一点吗?