How to convert a signal into an expression

I know this is a very specific question, so I was hoping that you could help me, I’m trying to convert the signal GListModel::items-changed, specifically I’m trying to convert the return value of GListModel.get_n_items into an expression that I can use in a widget like this:

let is_header_bar_visible_expr = gtk::ClosureExpression::new<bool>(
    [/* I don't know what to put here */],
    glib::closure!(|...| {
    })
);

is_header_bar_visible_expr.bind(&widget, "is_header_bar_visible");

What I’m trying to achieve is that if n_items > 1, then the expression should resolve to true, false otherwise

I thought this was gonna be an easy one, but then realized that GListModel doesn’t have an n-items property, just a getter method.

I cannot use the concrete type because it is private (AdwNavigationViewModel)

Solved, what I did was to use the Adw.NavigationView:visible-child property as a GtkExpression and access to the previous pages using the method Adw.NavigationView.get_previous_page(), to determine whether or not to show the header bar.

let this_page_has_previous_page = nav_view
    .property_expression("visible-page")
    .chain_closure<bool>(
        glib::closure_local!(
            #[weak]
            nav_view,
            #[upgrade_or]
            false,
            |this_page: &adw::NavigationPage, _visible_page: Option<glib::Object>| {
                nav_view.previous_page(this_page).is_some()
            }
        )
    )

ClosureExpression::new<bool>(
    [
        this_page_has_previous_page,
        another_expressions,
    ],
    glib::closure!(
        |_: Option<glib::Object>, this_page_has_previous_page: bool, others: bool| {
            this_page_page_has_previous_page || others
        }
    )
).bind(&widget, "is_header_bar_visible", &this_page);