0

DataBindingに入りたいのですが、現在行き詰まっています。私はそれを機能させることができません。私は多くのチュートリアルを読みましたが、正直なところ、どれも本当に役に立ちませんでした。DataBindingとは何か、なぜそれを使用するのがクールなのかは知っていますが、コードで何をすべきかを示すチュートリアルに出くわしたことはありません。それらはすべて、私がそこで何をしなければならないかを知っていると想定し、XAML側のみを示しています。

これは私のクラスです:

public class Test : Window
{
    public IList<String> data { get; set; }

    public Test() {
        data = new List<String>();
        InitializeComponents();
        data.Add("Hello");
        data.Add("World");
    }
}

これが私のXAMLです

<ListBox HorizontalAlignment="Left" Margin="6,6,0,6"
    Name="SourceDocumentsList" Width="202"
    ItemsSource="{Binding Source={x:Static Application.Current}, Path=data}" />

それでも、ウィンドウをレンダリングしても何も表示されません。どうしてこんなに簡単なことが失敗するのでしょうか?私はここで何が間違っているのですか?

data私が理解しているように、リストボックスに、現在実行中のアプリケーションのプロパティ(私のクラス)にバインドする必要があることを伝えますTest

4

2 に答える 2

2

現在実行中のアプリケーションはそのクラスではなく、単なるウィンドウであり、バインドするのはAppクラスのインスタンスです。この方法でそのウィンドウインスタンスを静的に取得することはできません。バインディングを作成する方法は、そのXAMLがどこにあるかによって異なります(Testウィンドウ内にある場合は、RelativeSource={RelativeSource AncestorType=Window}代わりに使用できます)。

データバインディングに関するMSDNドキュメントとデバッグに関するこの記事を読むことをお勧めします。

于 2012-07-10T12:12:24.930 に答える
1

これらのプロパティを次のような別のクラスに移動します

public class ViewModel
{
    public IList<String> Data { get; set; }

    public ViewModel()
    {
        Data = new ObservableCollection<string>();
        Data.Add("Hello");
        Data.Add("World");
    }
}

後ろのウィンドウコードを次のように変更します

public MainWindow()
    {
        InitializeComponent();
        DataContext = new ViewModel();
    }

Xamlはそれほど複雑に見えません

<ListBox HorizontalAlignment="Left" Margin="6,6,0,6"
Name="SourceDocumentsList" Width="202"
ItemsSource="{Binding Data}" />

これは、MVVMパターンへの移行と呼ばれるものです。ハッピーコーディング!

于 2012-07-10T12:22:47.407 に答える