MV4 LightをSL4で使用しています。私のビューはロケータを介してビューモデルを解決していますが、すべて正常です。Silverlight MVVM Light - xamlからコントロールの依存関係のプロパティ値を設定する
私の問題の1つは、別のビューで設定する必要があるプロパティがあります。
つまり、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>