2Bbear's knowledge workshop

예를 들어 프로젝트 구조가

위 사진처럼 CLM_RibbonView에서 다른 클래스 라이브러리에 있는 CLM_RibbonStyle.xaml을 참조 하고 싶을때 사용하는 방법입니다.


- CLM_RibbonView

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<UserControl x:Class="CLM.Views.CLM_RibbonView"
             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:CLM.Views"
             xmlns:p="clr-namespace:CLM.Properties"
             xmlns:customstyle="clr-namespace:NH80.Config;assembly=NH80.Config"
             mc:Ignorable="d" 
             VerticalAlignment="Top"
             Height="110"
             >
    <UserControl.Resources>
        <!--<ResourceDictionary Source="../Style/CLM_RibbonStyle.xaml"/>-->
        <!--<ResourceDictionary Source="../../../NH80.Config/Style/CLM_RibbonStyle.xaml"/>-->
        <!--<ResourceDictionary  Source="/NH80.Config;../Style/CLM_RibbonStyle.xaml"/>-->
        <!--<ResourceDictionary Source="../../NH80.Config\Style\CLM_RibbonStyle.xaml"></ResourceDictionary>-->
        <ResourceDictionary Source="pack://application:,,,/NH80.Config;component/Style/CLM_RibbonStyle.xaml"/>
 
    </UserControl.Resources>
cs


먼저 UserCibtrol로 만들어진 해당 뷰는 내부적으로 상단에 ResourceDictionary를 받아 올 수 있는 코드를 추가해 주었습니다. 

주석은 저의 여러가지 시도들이구요. 

결과적으로는 pack을 이용한 uri 참조가 성공적으로 빌드 되고 프로그램에서 작동했습니다.



-CLM_RibbonViewStyle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    >
 
    <!--Private-->
 
    <!--Public-->
    <!--Ribbon 메뉴버튼 스타일-->
    <Style x:Key="roundbutton" TargetType="{x:Type Button}">
        <Setter Property="Width" Value="60" />
        <Setter Property="Margin" Value="0" />
        <Setter Property="Height" Value="68" />
        <!--<Setter Property="Background" Value="Transparent"/>        --><!--배경색-->
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border>
                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Button}">
                            <Border>
                                <Grid >
                                    <Rectangle Name="m_Rectangle" Fill="#FFDDDDDD" Stroke="{x:Null}" RadiusX="5" RadiusY="5" />
                                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                                </Grid>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
 
cs



Ribbonview에서 참조해야 하는 xaml 파일은 style이 지정되어 있는 파일로써 ResourceDictionary로 만들어져 있습니다.



=============

설명


해당 클래스 라이브러리를 기본적으로 ../.. 등의 키워드로 참조하지 못하는 이유는, 어셈블리를 찾을 수 없기 때문입니다. 그렇기 때문에 Path 값을 상대적으로 지정해주면서 어셈블리를 명을 주어야 올바르게 프로그램에서 작동 할 수 있습니다.


그 과정에서 pack이라는 url 찾는 키워드를 이용하여 어셈블리를 넘겨주면서 파일을 불러왔습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
xmlns:p="clr-namespace:CLM.Properties"

<Button VerticalAlignment="Top"  Grid.Column="1"  Style="{StaticResource ResourceKey=roundbutton}" Command="{Binding EVCommand_PolicyManageWindow}">
                            <ItemsControl Style="{StaticResource ResourceKey=CustomGrid}" >
 
                                <Image   Grid.Row="0" Source="../Resource/Images/Icons/MenuIcon/02.png" Style="{StaticResource ResourceKey=CustomImage}" />
                                <TextBlock  Grid.Row="1"  Style="{StaticResource ResourceKey=CustomTextBlock}" >
                                    <TextBlock.Text>
                                        <MultiBinding StringFormat="{}{0}&#10;{1}">
                                            <Binding Source="{x:Static p:Resources.정책}" />
                                            <Binding Source="{x:Static p:Resources.관리}" />
                                        </MultiBinding>
                                    </TextBlock.Text>
                                </TextBlock>
                            </ItemsControl>
                        </Button>
cs


1. 개요

UE4 엔진에서 플러그인을 이용하여 손쉽게 코드를 분리하기 위해서, 모듈작업을 하는 것은 너무 불필요한 행위가 많다고 생각이 듬.

플러그인을 이용하여 코드들을 분리하여 작성하면 나중에 코드 껏다켯다만 해도 수정이 가능하니 좋다고 생각합니다.


2. 방법

  1. 프로젝트를 만듭니다. 혹은 이미 있는 프로젝트를 실행 시켜 Editor 창을 띄워도 무방합니다.

  2. Editor 창에서  상단 메뉴의 Eidt -> PlugIn을 클릭합니다.

  3. Plugin 관리 창이 뜨면 우측 하단의 New Plugin을 클릭합니다.

  4. 플러그인 생성 창에 적절히 플러그인 이름과 저작자의 이름을 등록합시다.


  5. Create Plugin을 눌르면 Visual Studio창이 켜지면서 솔루션 탐색기에 Plugin 아래에 자신이 만든 플러그인이 추가 되어 있는 것을 확인 할 수 있습니다. 추가로 Public 폴더를 열어보면   [플러그인이름BPLibrary]라고 클래스가 하나 만들어져 있는 것을 확인 할 수 있습니다.
    이제 블루프린트 관련한 코드는 저 파일에 작성하면 되는겁니다.

  6. 이제 위 사진 처럼 새로운 블루프린트 메소드를 작성해줍니다. 저는 여기서 MyTestFunction이라는 메소드를 선언했습니다.
    (추가로 UFUNTION을 작성해야지만 블루프린트로 만들어 질 수 있습니다.
    BlueprintCallable은 블루프린트로 호출 가능하다는 의미
    meta는 해당 블루프린트가 갖게 될 정보들, 예를 들어 블루프린트 이름이나, 호출 이름이나, 설명 등
    Category 해당 블루프린트가 어느 카테고리에 있을지 ,,,,나중에 Editor에서 보면 이해가 바로 됨)




  7. Hot Reload를 합시다. 이게 가장 중요함.
    다시 Editor로 돌아가서. 상단 메뉴의 Window -> Developer Tools -> Modules를 클릭.


    이러한 창이 뜨는데 상단 Search에 자신이 만든 Plugin 이름을 적어 봅시다. 그러면 하단에 자신이 만든 플러그인의 이름이 뜨고 옆에 Recompile이 나오게 됩니다. 해당 Recompile 버튼을 클릭하면 플러그인에 작성된 코드 들이 컴파일 되기 시작합니다. 
    이제 플러그인을 수정해야 할때마다 해당 버튼을 눌러야 하니 이 창을 Editor 어딘가에 붙여 둡시다.

  8. 만들어진 메소드들을 호출해 보기 , 적당히 Level 블루프린트를 열어서 우클릭을 해봅시다
    방금 자신의 플러그인에 메소드를 선언 할때 Category를 지정해 놓았다면 해당 Category이름으로 메소드가 정렬되어 있으니 적당히 이름을 검색해 봅시다.
    저 같은 경우는 Category가 Web Connect Plug in Testing 이었고, 메소드 이름이 MyTestFunction이었습니다. 
    위 사진에 올바르게 출력되는 것을 볼 수 있습니다.


끝!







master을(를) 푸시하는 중

분기를 원격 리포지토리에 푸시하는 동안 오류가 발생했습니다. Git failed with a fatal error.

The remote end hung up unexpectedly

The remote end hung up unexpectedly

RPC failed; HTTP 401 curl 22 The requested URL returned error: 401

Pushing to http://192.168.100.91:3000/Jangjungho/TestGit

Everything up-to-date


분기를 원격 리포지토리에 푸시하지 못했습니다. 자세한 내용은 출력 창을 참조하세요.


이런 문제....


혹은 같은 이유로 푸쉬가 안된다고 하는 다른 오류들이 발생 하였을 경우

대부분 사용자 이름과 비밀번호가 잘못 입력되어 있어 발생하는 문제이다.


해결 방법


1. 검색 창에 자격 증명 관리자 라고 친다




2. 자신이 접속하려고 했던 리포지토리의 주소를 찾는다.



찾았으면 클릭한다





이렇게 정보가 나오는데 분명 이 정보가 잘못되어서 발생하는 문제이다.

편집 버튼을 눌러 수정을 해주자





이렇게 정보를 수정하면 이제 다시 Push 해주고 잘 동작하는 것을 확인하면 된다

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

확인

Mvvm이란 무엇인가

Code/C#2019. 2. 28. 10:12


(출처 : https://happybono.wordpress.com/2017/10/10/mvvm-i-mvvm-%ED%8C%A8%ED%84%B4%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90/)



- 설명 -

Mvvm이란 Model, View, ViewModel을 줄인 약자로써 MVC 패턴에서 단점으로 여겨지는 View와 Model의 의존성을 최소화 하기 위해 사용되어진다. 

간단히 말하자면 화면에 보이는 View 와 프로그래밍적 로직을 담고 있는 Model을 서로 분리해서, Model을 기준으로 다른 View로 표현하게 할 수 있고, View를 기준으로 다른 데이터를 표현하기 위해 Model을 바꾸는 것이 쉬운 구조로 만드는 것이 주 목적이다.


- 주요 기능-

이러한 Mvvm을 구현하기 위해서 만들어진것이. Command 기능과 데이터 바인딩이라는 기법이다.


Command는 View에서 UI 이벤트를 처리하기 위해서 만들어졌다.

Command를 이용하여 View에서는 Model이 변경될 때 UI에 붙은 이벤트 이름을 변경할 필요가 없어졌다.


데이터 바인딩은 Model에서 만들어진 Data를 View에 표현하기 위해서 만들어졌다.

데이터 바인딩을 이용하여 Model에서 다른 View로 데이터를 표현할때 View의 UI를 호출하지 않고 데이터를 출력 할 수 있게 되었다.



- 구성 -



기본적으로 UI가 나오는 프로그램의 기본 요소는

자료를 저장할 데이터 ,

데이터를 처리하는 로직 ,

데이터를 표현하는 UI 

이렇게 3가지 정도로 나눌 수 있다.


여기에 Mvvm을 하기 위해 Property - 데이터 바인딩용 과 Delegate-Command용이 추가된다.


이러한 요소들을 Model, ViewModel, View로 나누어 넣으면


Model

- 데이터를 처리하는 메소드


ViewModel

- 데이터를 저장하고 있는 프로퍼티

- 데이터를 저장하기 위한 공간

- 이벤트 처리를 위한 Delegate


View

- Command가 붙은 UI


이렇게 구성이 된다.



- 도움이 되는 프레임워크 또는 라이브러리 -

WPF 

 - DevExpress

 - Prism


- 도움이 되는 예제 -

https://github.com/2Bbear/WindowsProgrmaDevelop/tree/master/WPF

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

확인

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

확인