関連する子ビューを含むItemsControlにバインドするViewModelsのObservableCollectionがあります。 ViewModelをコレクションに追加すると、適切な数の子ビューがItemsControlに生成されます。ただし、生成された各ビューのDataContextはnullです。子ビューをインライン化すると正しく動作します。ですから、私の子ビューのDataContextをViewModelに設定するためには何が必要ですか?ItemsControlでDataTemplateとしてViewを使用するとDataContextが設定されない
はここに私の親のViewModel内のrelaventのビットです:
public ObservableCollection<ChildViewModel> Numbers { get; set; }
public ParentViewModel()
{
Numbers = new ObservableCollection<ChildViewModel>();
}
private void ShowNumbers()
{
foreach (var num in Enumerable.Range(0, number))
{
var childView = new ChildViewModel(number.ToString());
Numbers.Add(childView);
}
}
親ビューから
関連ビット:
<ItemsControl ItemsSource="{Binding Numbers, UpdateSourceTrigger=PropertyChanged}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type vm:ChildViewModel}">
<v:ChildView />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
子ビュー:
<UserControl x:Class="TestWpfApp.Views.ChildView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True">
<Grid>
<Label Content="{Binding NumberString}" Width="30" Height="30" BorderThickness="1" BorderBrush="Black" HorizontalAlignment="Center"/>
</Grid>
</UserControl>
子供のViewModel:
public class ChildViewModel : BindableBase
{
private string numberString;
public string NumberString
{
get
{
return numberString;
}
set
{
SetProperty(ref numberString, value);
}
}
public ChildViewModel() { }
public ChildViewModel(string number)
{
NumberString = number;
}
}
明らかに、私は何かが誤って構成されていますが、私の人生にとって何が分かりませんか?
はFYI私はプリズムライブラリ
プリズム:ViewModelLocator.AutoWireViewModel'を設定しないでください。WPFは既にItemControl内のアイテムコンテナのDataContextプロパティの設定に注意しているからです。参照:http://stackoverflow.com/q/33043978/1136211 – Clemens
'DataContext'はあなたの' ViewModel'に設定されていますか?または単に 'DataTemplate's'は適用できませんか?いくつかの 'string'プロパティを作成し、あなたの' DataContext'がセットされているかどうかをテストする 'View'をバインドしてください。 – StepUp
まあ@Clemens、あなたは絶対に正しかったです。そのコード行を削除すると、すべての作業が完了しました。それを回答として提出すれば、私はそれを容認された解決策にしたいと思います。 – greenjaed