将具有布尔值和文本的类数据绑定到 XMAL
本文关键字:数据绑定 XMAL 文本 布尔值 | 更新日期: 2023-09-27 17:55:17
我不小心提交了这个,我自己修复了它,写出问题后不会提交。但是从评论中学到了,谢谢!
我正在尝试在win8中创建一个简单的待办事项应用程序,并最终希望将其放入ToDoIst API。我创建了一个简单的任务类来尝试绕过数据绑定,但我就是无法让它做我想做的事情。我使用了列表框和其他基本表单元素。
任务.cs
class task
{
private string content;
private bool complete;
public string Content
{
get {return content;}
set { content = value; }
}
public bool Complete
{
get { return complete; }
set { complete = value; }
}
public task(string content)
{
Content = content;
Complete = false;
}
}
MainPage.xaml
目前,我的 XAML 看起来像这样。
<GridView HorizontalAlignment="Left" Margin="482,190,0,0" VerticalAlignment="Top" Width="400" Height="500">
<ListView x:Name="LVtasks" HorizontalAlignment="Left" Height="500" VerticalAlignment="Top" Width="400" ItemsSource="{Binding}">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Content}"/>
<RadioButton/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</GridView>
我已经输入了一些虚拟数据,4 个元素,当我运行它时,它会出现 4 个带有单选按钮的框,但没有文本(文本有空间)我不确定我将如何绑定布尔值?
我看不出我做错了什么。如果有人可以帮助并指出我正确的方向,我已经搜索了相当多的教程,只是无法弄清楚。
你的代码看起来有点奇怪,也许这就是你想要的:
<ListView x:Name="LVtasks" HorizontalAlignment="Left" Height="500" VerticalAlignment="Top" Width="400" ItemsSource="{Binding ToDoItems}">
<ListView.ItemTemplate>
<DataTemplate>
<RadioButton GroupName="ToDos" Content="{Binding Content}" IsChecked="{Binding IsComplete}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
你真的想要单选按钮吗?我认为您想要复选框,不同之处在于当您使用单选按钮时,组中只能"选中"一个按钮
我使用下面的代码来获得数据上下文:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ToDoItems = new ObservableCollection<TodoItem>(new List<TodoItem>
{
new TodoItem("Content1"),
new TodoItem("Content2")
});
this.DataContext = this;
}
public ObservableCollection<TodoItem> ToDoItems { get; set; }
}
我将任务的名称更改为 ToDoItem 任务已经是框架中的一个类,可能会引起混淆。
对于RadioButton
IsChecked
是绑定到 bool 属性的属性:
<RadioButton IsChecked="{Binding Path=Complete}"/>
您的文本很可能没有显示,因为您尚未设置任何更改通知,并且在设置Content
值之前发生了绑定。使用 INotifyPropertyChanged 接口是最常见且通常最简单的方法。
就像 John 已经提到的,你应该让包含列表视图的窗口实现 INotifyPropertyChanged 接口。并像 Johan 所说的那样设置窗口的数据上下文。在属性的每个资源库中调用 propertychanged 方法非常重要。将可观察集合用作列表视图的项源也很有用。尝试创建 ObservableCollection 的实例,为其创建一个属性,在其资源库中调用 propertychanged 方法,将列表视图的集合 rhe ItemSource 设置为该属性。不要忘记在集合中添加或删除项时调用属性更改