私はシンプルなウィンドウがあります:
<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でこれを機能させるにはどうすればよいですか?
@JesseJamesの言うことは真実ですが、十分ではありません。
あなたは置く必要があります
private ObservableCollection<Activity> Activities { get; set; }
なので
public ObservableCollection<Activity> Activities { get; set; }
バインディングは次のようになります。
<ListView x:Name="lvItems" ItemsSource="{Binding Path=Activities}" />
よろしく、
他のユーザーが回答したように、DataContextをthisに設定する必要がありますが、DataContext
〜xaml
も設定できます。
<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>
セットする DataContext = this
ウィンドウコンストラクター内。
public WinActivityManager()
{
Activities = new ObservableCollection<Activity>();
DataContext = this;
InitializeComponent();
}
その後、必要に応じてアクティビティをバインドできます:<ListView x:Name="lvItems" ItemsSource="{Binding=Activities}" />
これは、ビューのデータコンテキストが設定されていないためです。背後のコードでこれを行うことができます:
this.DataContext = this;
または、ウィンドウのDataContext
をそれ自体に設定することもできます-DataContext="{Binding RelativeSource={RelativeSource Self}}"
MVVM設計パターン と MVVMフレームワークを使用 を調査しても、はるかに良い結果が得られます。