Silverlight MVVM Light - установка значения свойства зависимости элемента управления из xaml - PullRequest
0 голосов
/ 24 февраля 2011

Я использую MVVM Light с SL4. Мои View разрешают их View Model через локатор, все в порядке.

Моя проблема в том, что у одного из моих представлений есть свойство, которое мне нужно установить в другом представлении.

т.е. HomeView может иметь много экземпляров компонентного представления. Но в этом домашнем представлении я хочу установить свойство в представлении компонента. Я попытался добавить свойство зависимостей в код за представлением, которое затем можно установить из HomeView, но моя модель представления компонентов не получает его.

Возможно ли это сделать?

ComponentControl.cs

public enum CustomStyle
{
    Active,
    Draft,
    Completed
}

public class ComponentControl : Control
{
    public ComponentControl()
    {
        DefaultStyleKey = typeof (ComponentControl);
    }

    public CustomStyle CustomType
    {
        get { return (CustomStyle)GetValue(CustomTypeProperty); }
        set { SetValue(CustomTypeProperty, value); }
    }

    public static readonly DependencyProperty CustomTypeProperty =
        DependencyProperty.Register("CustomType",
        typeof(CustomStyle),
        typeof(ComponentControl), null);
}

ComponentViewModel.cs

public CustomStyle CustomType
{
    get { return _customType; }
    set
    {
        if (value == _customType)
            return;

        _customType = value;
        base.RaisePropertyChanged("CustomType");
    }
}
private CustomStyle _customType;

ComponentView.xaml.cs

public static readonly DependencyProperty CustomTypeProperty =
    DependencyProperty.Register("CustomType", 
    typeof(CustomStyle), 
    typeof(ComponentView), null);

public CustomStyle CustomType
{
    get { return (CustomStyle)GetValue(CustomTypeProperty); }
    set { SetValue(CustomTypeProperty, value); }
}

ComponentView.xaml

<Grid>
    <common:ComponentControl 
            DataContext="{Binding Path=WorkflowList, Mode=OneWay}" 
            CustomType="{Binding Path=CustomType, Mode=TwoWay, 
                                 ElementName=root}" />
</Grid>

HomeView.xaml

<Grid x:Name="LayoutRoot">
    <common:HomeControl x:Name="homeControl">
        <common:HomeControl.ActiveContent>
            <local:ComponentView x:Name="active" CustomType="Active" />
        </common:HomeControl.ActiveContent>
        <common:HomeControl.DraftContent>
            <local:ComponentView x:Name="draft" CustomType="Draft" />
        </common:HomeControl.DraftContent>
        <common:HomeControl.CompletedContent>
            <local:ComponentView x:Name="completed" CustomType="Completed" />
        </common:HomeControl.CompletedContent>
    </common:HomeControl>
</Grid>

1 Ответ

0 голосов
/ 24 февраля 2011

Я думаю, что могу вам немного помочь, некоторое время назад я ответил на похожий вопрос:

Silverlight: Как связать с DataContext родительского представления?

Дочернее представление в моем примере содержит свойство зависимости, значение которого установлено в родительском представлении. Дочернее представление привязывается к этому свойству зависимости, используя привязку с ElementName = "this"

...