DataTemplate을 이용하면 데이터를 유연하게 표시할 수 있다.
참고 url: c# - Binding ContentControl Content for dynamic content - Stack Overflow
예제
<UserControl x:Class="ColorViews.DarkTurquoise"
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:ColorViews"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<Border Background="DarkTurquoise" />
</Grid>
</UserControl>
using DemoLibrary;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ColorViews
{
public class DarkTurquoiseViewModel : ViewModelBase
{
}
}
위와 같은 사용자정의 컨트롤을 만들었다.
이것을 메인 윈도우나 다른 컨트롤에 연결하려고 할경우 MVVM을 해치게 될 경우가 있다.
이럴때 간단하게 Xaml로 DataTemplate에 등록한 후 메인 뷰모델에서 인스턴스만 생성해 놓으면(물론 Prism같은 것을 사용하면 더 간단하고 Unity 같은 DI 프레임워크를 사용할 수 있지만, 없다고 가정한다.
<Window x:Class="PlainWpfApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:PlainWpfApp"
xmlns:color="clr-namespace:ColorViews;assembly=ColorViews"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<DataTemplate DataType="{x:Type color:DarkTurquoiseViewModel}">
<color:DarkTurquoise />
</DataTemplate>
</Window.Resources>
<Window.DataContext>
<local:MainWindowViewModel />
</Window.DataContext>
<Grid>
<!--<StackPanel>
<TextBlock Text="Test1" />
</StackPanel>-->
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.2*"/>
<ColumnDefinition Width="0.8*"/>
</Grid.ColumnDefinitions>
<ContentControl Grid.Column="0" Content="{Binding DarkTurq}" />
</Grid>
</Grid>
</Window>
using ColorViews;
using DemoLibrary;
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
namespace PlainWpfApp
{
public class MainWindowViewModel : ViewModelBase
{
private ViewModelBase _darkTurq;
public ViewModelBase DarkTurq
{
get { return _darkTurq; }
set
{
_darkTurq = value;
this.NotifyPropertyChanged();
}
}
public MainWindowViewModel()
{
DarkTurq = new DarkTurquoiseViewModel();
}
}
}
'C#' 카테고리의 다른 글
Wpf MVVM (0) | 2023.06.03 |
---|---|
링크 정리하기 (0) | 2018.08.15 |
DB접속해서 테이블 데이터 참조하기 (0) | 2016.12.29 |
C# ArrayList (0) | 2016.12.26 |