0

誤って提出したのですが、自分で直して質問を書いた後は提出しませんでした。しかし、コメントから学びました、ありがとう!

私はwin8で簡単なtodoアプリを作成しようとしていますが、最終的にはそれをToDoIstAPIにホックしたいと思っています。データバインディングに頭を悩ませるための簡単なタスククラスを作成しましたが、やりたいことを実行することができません。リストボックスやその他の基本的なフォーム要素を使用しました。

task.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つ表示されますが、テキストがありません(テキスト用のスペースがあります)。ブール値をバインドする方法がわかりません。

自分が間違っていることがわかりません。誰かが私を助けて正しい方向に向けることができれば、私はかなりの量のチュートリアルを検索しましたが、それを理解することはできません。

4

3 に答える 3

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>

本当にラジオボタンが欲しいですか?チェックボックスが必要だと思います。違いは、ラジオボタンを使用する場合、グループ内の1つだけを「チェック」できることです。

私はこのコードビハインドを使用してデータコンテキストを作成しました。

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 に答える
1

RadioButton IsCheckedbool プロパティにバインドするプロパティは次のとおりです。

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

変更通知を設定しておらず、値を設定する前にバインドが行われているため、テキストが表示されない可能性がありContentます。INotifyPropertyChanged インターフェイスを使用するのが最も一般的で、通常はこれを行う最も簡単な方法です。

于 2013-01-21T18:36:16.387 に答える
0

ジョンがすでに述べたように、リストビューを含むウィンドウに INotifyPropertyChanged インターフェイスを実装させる必要があります。Johanが言ったように、ウィンドウのデータコンテキストを設定します。プロパティの各セッターで propertychanged メソッドを呼び出すことが重要です。また、リストビューの ItemSource として ObservableCollection を使用すると便利です。ObservableCollection のインスタンスを作成し、そのセッターで propertychanged メソッドを呼び出してプロパティを作成し、リストビューの ItemSource をプロパティに設定します。コレクションに項目を追加または削除するときはいつでも、propertychanged を呼び出すことも忘れないでください。

于 2013-01-21T20:05:27.477 に答える