MVVM WPFで作業しています。私はlistBoxをポップアップパネルに含めています。ポップアップが表示されますが、リストボックスは塗りつぶされません。理想的な理由はありません。リストボックスは、データの列をフィルタリングするために使用されます。MVVMにコンボボックスのリストが設定されていません
<ListBox x:Name="listBoxPopupContent" ItemsSource="{Binding ClassViewMethod}">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsChecked}" Content="{Binding ClassName}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
とモデルビュー:
public ObservableCollection<ClassView> ClassViewMethod
{
get
{
foreach (string cust in ClassViewItems.Select(w => w.ClassName).Distinct().OrderBy(w => w))
{
classFilters.Add(new CheckedListItem<string> { Item = cust, IsChecked = true });
}
viewSource.Filter += viewSource_Filter;
viewSource.Source = ClassViewItems;
return ClassViewItems;
}
}
private void viewSource_Filter(object sender, FilterEventArgs e)
{
ClassView cust = (ClassView)e.Item;
int count = classFilters.Where(w => w.IsChecked).Count(w => w.Item == cust.ClassName);
if (count == 0)
{
e.Accepted = false;
return;
}
e.Accepted = true;
}
public ObservableCollection<ClassView> ClassViewItems
{
get
{
return _classView;
}
set
{
_classView = value;
NotifyPropertyChanged("ClassViewItems");
}
のDataContextは(app.xamlに)ように設定されている:
<Application.Resources>
<local:MainWindowViewModel x:Key="MainWindowViewModel" />
</Application.Resources>
とMainWindow.xamlに:ここでリストボックスがある
DataContext="{StaticResource MainWindowViewModel}"
上のすべてのことを示しています。 MainWindowViewModelは、MainWindowのビューモデルです。だから、XAMLのMainWindowのコンストラクタでは、WindowsのDataContextプロパティに割り当てて、ビューモデルを作成してアタッチすることができます。しかしここでは、MainWindowViewModelに独自のDataContextプロパティがあります。そして、あなたのMainWindowViewModelのプロパティであるかのようにコントロール(lstClassName、grdData、...)を割り当てています。 MainWindowとMainWindowViewModelが同じクラスであるようです。 – Sjips
xamlの 'Popup'部分が見えますか? – Sinatr
これはMVVMではありません。ビューモデルでUI要素プロパティを割り当てることは意味がありません。つまり、listBoxPopupContentのItemsSourceを設定したりバインドしたりしていないようです。 – Clemens