web-dev-qa-db-ja.com

ItemsControl.ItemsSourceをXAMLのプロパティにバインドするにはどうすればよいですか?

私はシンプルなウィンドウがあります:

<Window x:Class="WinActivityManager"
        xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml">
    <Grid>
        <ListView x:Name="lvItems" />
    </Grid>
</Window>

そして背後にある関連コード:

public partial class WinActivityManager : Window
{
    private ObservableCollection<Activity> Activities { get; set; }

    public WinActivityManager()
    {
        Activities = new ObservableCollection<Activity>();
        InitializeComponent();
    }

    // Other code ...
}

ウィンドウコンストラクタに次のバインディングを記述した場合:

lvItems.ItemsSource = Activities;

次に、Activitiesに要素を追加または削除すると、ListViewが自動的に更新されます。

XAMLでバインディングをどのように記述する必要がありますか?
私はこれを試しましたが、うまくいきません:

<ListView x:Name="lvItems" ItemsSource="{Binding=Activities}" />

XAMLでこれを機能させるにはどうすればよいですか?

9
Jonny Piazzi

@JesseJamesの言うことは真実ですが、十分ではありません。

あなたは置く必要があります

private ObservableCollection<Activity> Activities { get; set; } 

なので

public ObservableCollection<Activity> Activities { get; set; }

バインディングは次のようになります。

<ListView x:Name="lvItems" ItemsSource="{Binding Path=Activities}" />

よろしく、

13
sexta13

他のユーザーが回答したように、DataContextをthisに設定する必要がありますが、DataContextxamlも設定できます。

<Window x:Class="WinActivityManager"
        xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
        DataContext="{Binding RelativeSource={RelativeSource Self}}">
    <Grid>
        <ListView x:Name="lvItems" ItemsSource="{Binding Path=Activities}" />
    </Grid>
</Window>
12
Farhad Jabiyev

セットする DataContext = thisウィンドウコンストラクター内。

public WinActivityManager()
{
    Activities = new ObservableCollection<Activity>();
    DataContext = this;
    InitializeComponent();
}

その後、必要に応じてアクティビティをバインドできます:<ListView x:Name="lvItems" ItemsSource="{Binding=Activities}" />

2
opewix

これは、ビューのデータコンテキストが設定されていないためです。背後のコードでこれを行うことができます:

this.DataContext = this;

または、ウィンドウのDataContextをそれ自体に設定することもできます-DataContext="{Binding RelativeSource={RelativeSource Self}}"

MVVM設計パターンMVVMフレームワークを使用 を調査しても、はるかに良い結果が得られます。

1
devdigital