我正在尝试在win8中创建一个简单的待办事项应用程序,并最终希望将其变为ToDoIst API。 我已经创建了一个简单的任务类来尝试并绕过数据绑定,但是我无法让它做我想做的事情。我使用了列表框和其他基本表单元素。
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;
}
}
目前我的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个带有单选按钮的盒子,但没有文本(文本有空间)我不知道如何绑定bool?
我看不出我做错了什么。如果有人可以提供帮助并指出我正确的方向,我已经搜索了相当数量的教程,只是无法搞清楚。
答案 0 :(得分:1)
对于RadioButton
IsChecked
是绑定到bool属性的属性:
<RadioButton IsChecked="{Binding Path=Complete}"/>
您的文字很可能没有显示,因为您没有设置任何更改通知,并且在设置Content
值之前发生了绑定。使用INotifyPropertyChanged interface是最常见且通常最简单的方法。
答案 1 :(得分:1)
你的代码看起来有点奇怪,也许这就是你想要的:
<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>
你真的想要radiobuttons吗?我认为你想要Checkboxes,不同之处在于当你使用单选按钮时,只能在一组中有一个被“检查”
我使用此代码后面有一个datacontext:
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任务已经是框架中的一个类,可能会引起混淆。
答案 2 :(得分:0)
就像John已经提到的那样,你应该让包含listview的窗口实现INotifyPropertyChanged接口。并像Johan说的那样设置窗口的数据上下文。在属性的每个setter中调用propertychanged方法很重要。将ObservableCollection用作listview的ItemSource也很有用。尝试创建一个ObservableCollection的实例,为它创建一个属性,在其setter中调用propertychanged方法,将listview的一个set ItemSource设置为属性。每当您从集合中添加或删除项目时,不要忘记调用propertychanged