首页 > 解决方案 > Xamarin 表单:数据绑定

问题描述

我已将“IsVisible”属性的绑定源设置为后面代码中的公共变量,而无需遵循 MVVM。在这种情况下,即使变量的状态发生了变化,视图(在这种情况下为 ListView)仍然可见。

private void btnNotifications_Clicked(object sender, EventArgs e)
{
    if (!ActivateControlButton(sender as Button))
    {
        Remove_ChildElements_InUserCOntrol();
        return;
    }

    Is_MainTaskList_Visible = false;
}

我的xml代码是:

<ListView x:Name="lstUserTasks"
          Grid.Row="2" 
          ItemsSource="{Binding User_Task_Groups}"
          IsGroupingEnabled="True"
          FlowDirection="LeftToRight"
          HasUnevenRows="True"
          ItemSelected="lstUserTasks_ItemSelected"
          ItemTapped="lstUserTasks_ItemTapped"
          IsVisible="{Binding Is_MainTaskList_Visible}">

有人可以帮忙吗?

如何通知 UI 线程此属性已更改?

标签: xamarin.forms

解决方案


您可以使用以下代码:

 public class UserViewModel
{

    public UserViewModel()
    {
        CreateCollection();
        Is_MainTaskList_Visible = true;
    }
    public ObservableCollection<User> User_Task_Groups { get; set; }
    public bool Is_MainTaskList_Visible { get; set; }
    public void CreateCollection()
    {
        User_Task_Groups = new ObservableCollection<User>()
        {
            new User(){ Name="A"},
            new User(){ Name="B"},
            new User(){ Name="C"},
        };

    }
}
public class User
{
    public string Name { get; set; }
}

xml:

<ContentPage.BindingContext>
    <local:UserViewModel></local:UserViewModel>
</ContentPage.BindingContext>
<ContentPage.Content>
    <StackLayout>
        <Button Clicked="Button_Clicked"></Button>
        <ListView x:Name="lstUserTasks" Grid.Row="2" 
          ItemsSource="{Binding User_Task_Groups}"   FlowDirection="LeftToRight" HasUnevenRows="True"
          ItemSelected="lstUserTasks_ItemSelected"
          ItemTapped="lstUserTasks_ItemTapped" IsVisible="{Binding Is_MainTaskList_Visible}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Label Text="{Binding Name}"></Label>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>
</ContentPage.Content>

推荐阅读