Как передать в user control текущий экземпляр, чтобы его использовать для привязки внутри user control (ItemCard).
Строчка <customcontrols:ItemCard></customcontrols:ItemCard> Это и есть user control (ItemCard)
MainViewModel.cs
using Organaizer.MVVM.Model;
using Organaizer.MVVM.View;
using Organaizer.MVVM.ViewModel.Base;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;
using System.Windows.Input;
namespace Organaizer.MVVM.ViewModel
{
public class MainViewModel : BaseViewModel
{
private ObservableCollection<ItemInfoCard> _itemInfoCards = new ObservableCollection<ItemInfoCard>() {
new ItemInfoCard(E_CategoryGroup.dir, false),
new ItemInfoCard(E_CategoryGroup.exe, false)
};
public IEnumerable<ItemInfoCard> ItemInfoCards
{
get => _categoryGroup==E_CategoryGroup.favorite? _itemInfoCards.Where(item => item.IsFavorite == true) : _itemInfoCards.Where(item => item.CategoryGroup == _categoryGroup);
}
public void Initialize()
{
_itemInfoCards.Add(new ItemInfoCard(E_CategoryGroup.exe, true));
}
#region Commands
private ICommand _cmdSelectedGroup;
public ICommand CmdSelectedGroup => _cmdSelectedGroup = new RelayCommand<string>(SelectedGroup);
private void SelectedGroup(string value)
{
_categoryGroup = (E_CategoryGroup) Enum.Parse(typeof(E_CategoryGroup), value);
RisePropertyChanged(nameof(ItemInfoCards));
}
private ICommand _cmdAddElement;
public ICommand CmdAddElement => _cmdAddElement = new RelayCommand(AddElement);
private void AddElement(object item)
{
SelectAddType vm = new SelectAddType(this);
vm.Show();
}
private ICommand _cmdSelectFavorite;
public ICommand CmdSelectFavorite => _cmdSelectFavorite = new RelayCommand<bool>(SelectFavorite);
private void SelectFavorite(bool value)
{
MessageBox.Show(value.ToString());
}
#endregion
}
}
MainWindows.xaml
ScrollViewer Grid.Column="1" >
<ItemsControl Grid.Column="0" ItemsSource="{Binding ItemInfoCards}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Margin="20" VerticalAlignment="Top" Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<customcontrols:ItemCard></customcontrols:ItemCard>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
ItemCard.xaml.cs
namespace Organaizer.UserControls
{
/// <summary>
/// Логика взаимодействия для ItemCard.xaml
/// </summary>
public partial class ItemCard : UserControl
{
public ItemCard()
{
InitializeComponent();
}
}
}

ItemCard? Если это контрол по типуTextBox, то он не должен знать вообще чего-либо про данные, он должен иметь конкретный вид, иметь конкретные свойства (свои), а снаружи уже этим свойствам задаются значения (<...:ItemCard Title = "Заголовок" Name = "Вася" Age = "123" />). Если это а-ля страница, со своим видом, данными и прочим, то там идет свое разделение на слои (View и VM), которые связываются черезDataContext. – EvgeniyZ Oct 04 '22 at 18:52DependencyPropertyс типомICommandдля всех кликов, а использование просто<uc:ItemCard Start = "{Binding ItemStartCommand}" .... />, как бы стандартные контролы) – EvgeniyZ Oct 04 '22 at 19:05DataContextна класс, который содержит эти все свойства, будет вам просто<control DataContext = "{Binding Item}"/>, компактно? Да вроде да. Но что с практичностью, переиспользованием, и так далее? Как понимаете, вы гвоздями все внутри контрола забиваете, что не всегда есть хорошо. Поэтому думайте как лучше поступить именно в вашем случае. – EvgeniyZ Oct 04 '22 at 19:17
– Андрей Reyz Oct 04 '22 at 22:32<customcontrols:ItemCard IsFavorite="{Binding IsFavorite}" FavoriteCommand="{Binding MainViewModel/CmdSelectFavorite}"></customcontrols:ItemCard>DataContext, ну а если нужен контекст родителя, то да, черезFindAncestorнаходится родитель, и у него берется уже свойство. – EvgeniyZ Oct 04 '22 at 23:07boolпеременная? Если это всежboolи не обновляется, то попробуйте задать мод привязки наTwoWay(можете прям у DependencyProperty). – EvgeniyZ Oct 05 '22 at 00:11CommandParameter). – EvgeniyZ Oct 05 '22 at 00:44