Итак, у меня есть UserControl для одного из моих просмотров, и внутри него есть еще один дочерний UserControl.
Внешний 'родительский' UserControl имеет коллекцию в своей View-Model и элемент управления Grid для отображения списка Items
.
Я хочу разместить другой UserControl внутри этого UserControl, чтобы отобразить форму, представляющую детали одного Item
.
В родительской модели представления UserControl уже есть свойство для хранения текущего выбранного Item
, и я хотел бы привязать его к свойству DependancyProperty дочернего элемента UserControl. Затем я хотел бы связать этот DependancyProperty со свойством в View-Model дочернего UserControl.
Затем я могу установить свойство DependancyProperty один раз в XAML с выражением привязки и заставить дочерний UserControl выполнять всю свою работу в своей View-Model так, как следует.
Код, который у меня есть, выглядит следующим образом ..
Родительский контроль пользователя:
<UserControl x:Class="ItemsListView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="{Binding Source={StaticResource ServiceLocator}, Path=ItemsListViewModel}">
<!-- Grid Control here... -->
<ItemDetailsView Item="{Binding Source={StaticResource ServiceLocator}, Path=ItemsListViewModel.SelectedItem}" />
</UserControl>
Child UserControl:
<UserControl x:Class="ItemDetailsView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="{Binding Source={StaticResource ServiceLocator}, Path=ItemDetailsViewModel}"
ItemDetailsView.Item="{Binding Source={StaticResource ServiceLocator}, Path=ItemDetailsViewModel.Item, Mode=TwoWay}">
<!-- Form controls here... -->
</UserControl>
РЕДАКТИРОВАТЬ: Вот как я создал Propenprice Propendrty для ребенка UC:
public partial class ItemDetailsView : UserControl
{
private static readonly DependencyProperty itemProperty;
static ItemDetailsView()
{
ItemDetailsView.itemProperty = DependencyProperty
.Register("Item", typeof(Item), typeof(ItemDetailsView), null);
}
public Item Item
{
get { return (Item)GetValue(ItemDetailsView.itemProperty); }
set { SetValue(ItemDetailsView.itemProperty, value); }
}
public static Item GetItem(DependencyObject target)
{
return (Item)target.GetValue(itemProperty);
}
public static void SetItem(DependencyObject target, Item value)
{
target.SetValue(itemProperty, value);
}
}
Выбранный Item
привязан к штрафу DependancyProperty. Однако из свойства DependancyProperty для дочернего View-Model нет.
Похоже, что существует ситуация, когда есть две параллельные привязки, которые должны работать, но с одной и той же целью для двух источников.
Почему не работает вторая (в дочернем UserControl) привязка ?? Есть ли способ добиться поведения, которое я преследую ??
Приветствие.