0

我不小心提交了这个,我自己修好了,写完问题后就不提交了。但是从评论中学到了,谢谢!

我正在尝试在 win8 中创建一个简单的 todo 应用程序,并最终希望将其加入 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;
    }
}

主页.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 个带有单选按钮的框,但是没有文本(文本有空间)我不确定如何绑定布尔值?

我看不出我做错了什么。如果有人可以帮助并指出正确的方向,我已经搜索了相当多的教程,但无法弄清楚。

4

3 回答 3

1

对于RadioButton IsCheckedis 绑定到 bool 属性的属性:

<RadioButton IsChecked="{Binding Path=Complete}"/>

您的文本很可能不会显示,因为您尚未设置任何更改通知,并且在设置Content值之前发生绑定。使用INotifyPropertyChanged 接口是最常见且通常也是最简单的方法。

于 2013-01-21T18:36:16.387 回答
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>

你真的想要单选按钮吗?我认为您想要Checkboxes,不同之处在于,当您使用单选按钮时,只能“选中”组中的一个

我在后面使用了这段代码来获得数据上下文:

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 任务已经是框架中的一个类,可能会引起混淆。

于 2013-01-21T19:02:50.443 回答
0

就像约翰已经提到的那样,您应该真正让包含您的列表视图的窗口实现 INotifyPropertyChanged 接口。并像 Johan 所说的那样设置窗口的数据上下文。在属性的每个设置器中调用 propertychanged 方法很重要。使用 ObservableCollection 作为列表视图的 ItemSource 也很有用。尝试创建 ObservableCollection 的实例,为其创建一个属性,在其设置器中调用 propertychanged 方法,将列表视图的 ItemSource 设置为该属性。每当您从集合中添加或删除项目时,不要忘记调用 propertychanged

于 2013-01-21T20:05:27.477 回答