티스토리 뷰
Free Board Project 14 by Silverlight 5
kaki104 2012. 1. 7. 00:47이번 강좌는 글쓰기 기능을 구현하도록 하겠다. 강좌가 너무 늦어서 잊혀져 가는 강좌였을 것인데..흐흐;; 필자도 요즘 슬럼프끼가 좀 보여서 어떻게 해야하는지 나름 고민 중인데..이번 강좌에 만은 호응을 기대해 본다.(호응 없으면...더욱더 깊은 슬럼프의 나락으로 떨어질지도..쿨럭)
이번에도 이곳 저것 수정을 해 놔서..중요한 부분은 이곳에서 설명을 하고, 나머지는 소스를 참고 할 수 있도록 소스를 올리도록 하겠다.
1. BOARD_LIST.cs
제일 시간이 오래 걸렸던 부분인데.. Code First로 텍스트 필드를 만들어 놓으면 128Byte의 기본 크기를 가지게 되는데..우리가 글을 작성할때 128바이트는 너무나 작은 사이즈라..이걸 대폭~늘려야 한다. 특히 RichTextBox를 사용해서 xaml을 직접 입출력을 할려고 하면 무지막지하게 커야한다. 그래서 클래스를 고쳤다.
[Column(TypeName="ntext")]
[MaxLength]
public string LIST_CONTENT { get; set; }
이렇게 컬럼을 수정해 놓으면 무척 만은 데이터를 저장 할 수 있게 된다.(정확한 사이즈는 MSDN에서..쿨럭)
추가로 테이블 스키마가 수정되면 전에 우리가 만들어 놓았던 SL5_BOARD_DBCONTEXTInitializer에서 데이터베이스를 Drop하고 다시 만들도록 되어 있었는데..이걸 약간 수정해보자..(데이터베이스 드롭되면 기존 데이터 다 날라가니..아무래도 좀..)
public class SL5_BOARD_DBCONTEXTInitializer
: CreateDatabaseIfNotExists<SL5_BOARD_DBCONTEXT>
이렇게 변경해 놓으면 데이터베이스 파일이 존재 하지 않을 때만 새로 만들어 준다.
에..그럼 기존 데이터베이스를 보존할려면 수동으로 스키마를 수정해야하는데..Server Explorer를 열어서 SL5_BOARD.sdf 파일을 연결 하고 Tables을 열어서 BOARD_LIST를 오른쪽 마우스로 클릭하면 Edit Table Schema를 선택하고, LIST_CONTEXT의 Data Type을 ntext로 변경하고 OK를 눌러주면 된다.
위의 그림을 참고해서 수정한다.
2. 글쓰기 버튼 클릭~
BoardListViewModel.cs 일부 소스
ICommand addCommand;
/// <summary>
/// 추가 커맨드
/// </summary>
public ICommand AddCommand
{
get
{
if (addCommand == null)
{
addCommand = new ActionCommand(() =>
{
BOARD_LIST obj = new BOARD_LIST();
obj.BOARD_MAIN_IDX = BoardMain.CurrentData.BOARD_MAIN_IDX;
//요기 1은 나중에 로그인 기능이 추가되면 로그인 유저 아이디로 변경
obj.MST_MEMBER_IDX = 1;
BoardListData.Adding(obj);
//수정 상태로 바로 변경
IsEditting = true;
});
}
return addCommand;
}
}
BoardList.cs 일부소스
/// <summary>
/// 추가 함수
/// </summary>
/// <param name="addData">BOARD_LIST</param>
public void Adding(Object addData)
{
if (addData != null && addData is BOARD_LIST)
{
BOARD_LIST item = addData as BOARD_LIST;
//요기 등록일시 넣는 부분과 등록자 아이디 넣는 부분 차후에 위치 변경 예정
item.REG_DT = DateTime.Now;
item.REG_IDX = 1;
//컨텍스트에 넣궁
BoardDomainService.Context.BOARD_LISTs.Add(item);
//컨디션데이터에도 넣구
ConditionData.Add(item);
//현재 데이터에 넣는다 -> 이렇게 넣으면 화면 변경되는 거 알죠?
CurrentData = item;
MessageData = "추가 작업을 완료 했습니다.";
}
else
{
MessageData = "데이터가 없거나 형식이 다릅니다.";
}
}
3. 저장 버튼 클릭
리치텍스트 박스의 xaml 프로퍼티는 직접 바인딩을 해보니 오류가 난다;; 그래서 시간 관계상 패수~ ㅋ
ICommand saveCommand;
/// <summary>
/// 저장 커맨드
/// </summary>
public ICommand SaveCommand
{
get
{
if (saveCommand == null)
{
saveCommand = new ActionCommand(item =>
{
RichTextBox rtb = item as RichTextBox;
if (rtb != null)
{
//현재 데이터에 LIST_CONTEXT에 리치텍스트박스 xaml프로퍼티 값을 바로 넣음
BoardListData.CurrentData.LIST_CONTENT = rtb.Xaml;
//그리고 저장
BoardListData.Saving();
}
//편집상태는 false로
IsEditting = false;
});
}
return saveCommand;
}
}
BoardList.cs 일부
/// <summary>
/// 저장 함수
/// </summary>
public void Saving()
{
//나중에 여기도 좀 바꿔야 하는뎅..에..이번에는 그냥 평범하게..
BoardDomainService.Context.SubmitChanges(submitCallBack, null);
}
요기는 특별히 할일은 없음
4. 조회 시
뷰모델에 있는 BoardListData의 프로퍼티 체인지 이벤트를 이용해서 CurrentData가 변경되면 그 데이터를 리치텍스트박스에 넣도록 코딩함.
BoardListDetailView.xaml.cs 일부
[Import(typeof(BoardListViewModel))]
public BoardListViewModel BoardListVM
{
get
{
return this.DataContext as BoardListViewModel;
}
set
{
this.DataContext = value;
value.BoardListData.PropertyChanged += new PropertyChangedEventHandler(BoardListData_PropertyChanged);
}
}
void BoardListData_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
switch (e.PropertyName)
{
case "CurrentData":
if (BoardListVM.BoardListData.CurrentData != null)
{
if (BoardListVM.BoardListData.CurrentData.LIST_CONTENT != null)
rtb.Xaml = BoardListVM.BoardListData.CurrentData.LIST_CONTENT;
else
rtb.Blocks.Clear();
}
break;
}
}
5. 프로그램이 좀 심플하고 깔끔하게 나오면 좋은데..^^;;; ..
당분간 한번 쭈욱~ 만들어서..한번에 쾅~하고 올려야 될 것 같다. 중간 중간 과정을 보여주기 위해서 여러번 나누어서 올리고 있는데.. 진도가 너무 앙나간다;; 지금 처럼 단계별로 올리는 것이 좋은 분들은 리플 남겨 주시면 현재 상태를 유지하고..무플인 경우에는 한번에 왕창 올리도록 하겠다. 으흐흐..왕창~~~~~~~~~~~~~
ps.첨부한 소스는 실버라이트 소스만 있습니다. 서버 소스는 포함되어 있지 않습니다. 참고하세요
'Previous Platforms > Free Board Project' 카테고리의 다른 글
Free Board Project 16 by Silverlight 5 (0) | 2012.01.07 |
---|---|
Free Board Project 15 by Silverlight 5 (0) | 2012.01.07 |
Free Board Project 13 by Silverlight 5 (0) | 2012.01.07 |
Free Board Project 12 by Silverlight 5 (0) | 2012.01.07 |
Free Board Project 11 by Silverlight 5 (0) | 2012.01.07 |
- Total
- Today
- Yesterday
- uno-platform
- .net 5.0
- visual studio 2019
- WPF
- IOT
- XAML
- #uwp
- Always Encrypted
- PRISM
- Cross-platform
- ComboBox
- ef core
- Behavior
- dotNETconf
- #Windows Template Studio
- .net
- uno platform
- windows 11
- Build 2016
- C#
- #prism
- MVVM
- kiosk
- #MVVM
- Windows 10
- Visual Studio 2022
- Microsoft
- Bot Framework
- LINQ
- UWP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |