Kiedy używam UserControl, przekazuję dane przez DependencyProperties. Moje UserControls nie ma ViewModels. UserControls obsługuje tylko przekazane dane w bardzo szczególny sposób.
Ale jeśli mam widok, który zawiera niektóre widoki, wolę mieć dla każdego sub-widoku własny model. Model ten będę wiązał poprzez właściwość ViewModel z MainView.
Kilka przykładów:
UserControl1, Code za:
public partial class UserControl1 : UserControl
{
public MyClass MyProperty
{
get { return (MyClass)GetValue(MyPropertyProperty); }
set { SetValue(MyPropertyProperty, value); }
}
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.Register("MyProperty", typeof(MyClass), typeof(UserControl1), new UIPropertyMetadata(null));
public UserControl1()
{
InitializeComponent();
}
}
public class MyClass
{
public int MyProperty { get; set; }
}
A Wykorzystanie w widoku XAML:
<Window x:Class="Sandbox.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Sandbox="clr-namespace:Sandbox">
<Grid>
<Sandbox:UserControl1 MyProperty="{Binding MyOtherPropertyOfTypeMyClassInMyViewModel, Mode=TwoWay}" />
</Grid>
Nadzieja to pomaga
cześć Nigdy nie użyłem DependencyProperties. Czy możesz podać mi link lub krótko wyjaśnić, w jaki sposób kontrola użytkownika powinna korzystać z właściwości Dependency. Czy powinienem utworzyć typ dla jednego elementu userControl, a następnie powiązać go z różnymi właściwościami w widoku? – ganeshran
Dodałem prosty przykład: – WaltiD
Dzięki WaltiD spróbuję tego podejścia. Czy mogę również powiązać go z typem zdefiniowanym przez użytkownika? – ganeshran