xamarin.forms - 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 线程此属性已更改?
解决方案
您可以使用以下代码:
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>
推荐阅读
- android - 单击cardview项目时更改颜色?
- reactjs - 使用来自 highcharts-react-official 的 PieChart
- xslt - 如何使用 FOP(xsl 和 ftl)为 PDF 生成中的每一页创建边框?
- c# - 尝试使用 getcomponent 访问基类
- excel - 检查和添加值
- linux - CUPS 错误请求
- java - 似乎无法使 android 状态保存工作
- c# - 如何使用具有两个不同参数值的 HttpGet 方法
- c - 对外部函数的未定义引用 - C
- node.js - Node.js:签名验证(PS256)在 Node.js 中成功,但在 jwt.io 调试器中失败