Last active
May 10, 2020 05:05
-
-
Save AlBannaTechno/66bb5f955d88237882f82a2bb8f9994e to your computer and use it in GitHub Desktop.
SimpleViewModelViewHost
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<UserControl x:Class="Sample.EnhancedViewModelViewHost" | |
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | |
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | |
xmlns:local="clr-namespace:NetReactorLGS.Desktop.Helpers" | |
mc:Ignorable="d" | |
DataContext="{Binding RelativeSource={RelativeSource Self}}" | |
d:DesignHeight="450" d:DesignWidth="800"> | |
<ContentPresenter | |
x:Name="MainContent" | |
Content="{Binding Path=View}" | |
/> | |
</UserControl> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Text; | |
using System.Threading.Tasks; | |
using System.Windows; | |
using System.Windows.Controls; | |
using System.Windows.Data; | |
using System.Windows.Documents; | |
using System.Windows.Input; | |
using System.Windows.Media; | |
using System.Windows.Media.Imaging; | |
using System.Windows.Navigation; | |
using System.Windows.Shapes; | |
using ReactiveUI; | |
namespace NetReactorLGS.Desktop.Helpers | |
{ | |
// https://stackoverflow.com/questions/36433709/whenactivated-is-called-twice-when-used-in-views-and-viewmodels-hosted-in-viewmo/36813328#36813328 | |
/// <summary> | |
/// Interaction logic for EnhancedViewModelViewHost.xaml | |
/// </summary> | |
public partial class EnhancedViewModelViewHost : UserControl | |
{ | |
public static readonly DependencyProperty ViewModelProperty = DependencyProperty.Register( | |
"ViewModel", typeof(object), typeof(EnhancedViewModelViewHost), new PropertyMetadata(default(object))); | |
public object ViewModel | |
{ | |
get => GetValue(ViewModelProperty); | |
set | |
{ | |
SetValue(ViewModelProperty, value); | |
if (value == null) { return; } | |
var view = ViewLocator.Current.ResolveView(value); | |
if (view != null) | |
{ | |
View = view; | |
View.ViewModel = value; | |
} | |
else | |
{ | |
MainContent.Content = value; | |
} | |
} | |
} | |
public static readonly DependencyProperty ViewProperty = DependencyProperty.Register( | |
"View", typeof(IViewFor), typeof(EnhancedViewModelViewHost), new PropertyMetadata(default(IViewFor))); | |
public IViewFor View | |
{ | |
get => (IViewFor)GetValue(ViewProperty); | |
set => SetValue(ViewProperty, value); | |
} | |
public EnhancedViewModelViewHost() | |
{ | |
DataContext = this; | |
InitializeComponent(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment