반응형 .NET23 Anchor Tag Helper 란? (앵커 태그 도우미) Anchor Tag Helper 란? 설명 Anchor Tag Helper는 표준 HTML 태그에 새로운 특성을 추가하여 향상시킨다. 규칙에 따라 해당 특성들의 이름은 asp- 접두사로 시작된다. 렌더링 되는 Anchor 요소의 href 특성 값은 asp- 특성들의 값에 따라 결정된다. 특성 asp-controller asp-controller 는 URL 생성에 사용되는 Controller를 할당한다. All Speakers All Speakers asp-action asp-action 은 생성되는 href 특성에 작업되는 이름을 나타낸다. Controller 에 Route에 [action] 부분과 동일한 부분이다. Speaker Evaluations Speaker Evaluations 만약 asp-ac.. 2023. 7. 11. [C#] Linq - Aggregate 메서드 Aggregate namespace : Systme.Linq Assembly : System.Linq.dll Aggregate는 정확히는 Enumerable.Aggregate 이다. 반복적으로 일어나는 행위에 대해서 처리되는 메서드 이다. Overloads Method Description Aggregate(Ienumerable, Func) 시퀀스에 누적 함수를 적용한다. Aggregate(IEnuerable, TAccumulate, Func) 시퀀스에 누적시 삼수를 적용한다. 지정된 시드 값은 초기 누적기 값으롤 사용된다. Aggregate(IEnumerable, TAccumulate, Func, Func) 시퀀스에 누적기 함수를 적용한다. 지정된 시드 값은 초기 누적기 값으로 사용된다. 지정된 함수는.. 2023. 6. 27. [C#] XmlElement 여러개 설정 해당 글은 XmlElement 여러 개 설정하는 상황과 방법에 대해 알 수 있다. 최근 비슷한 Xml 형식에 List 받는 부분만 달라지는 경우가 발생하여 해당 상황을 어떻게 하면 좀 더 편리하게 관리할 수 있을지 고민하다가 활용한 방법이다. XmlElement는 Xml의 요소를 나타낸다. XmlElement의 속성들 중 ElementName, Type을 이용하여 다양한 객체를 하나의 속성으로 받아 사용하기 위해 해당 설정을 하여 해결이 가능했다. 해당 방법은 아래 사용방법과 예시를 통해 좀 더 자세히 설명하겠다. 사용방법 Data1 2 potato 23400 thin Large pepperoni 11400 thin small Data2 2 pasta1 11000 2 pasta2 23400 1 Data1.. 2023. 1. 11. [C#] List 정렬 총정리(기본정렬, 여러개 정렬) List를 정렬하는 방법을 총정리한다. 해당 정리로 다양한 정렬을 할 수 있고 예시를 통해 쉽고 빠르게 이해하도록 하자. 정렬은 기본적으로 Enumerable 클래스의 메서드를 사용한다. Linq 패턴을 따른다. 해당 정리는 .NET6 기준으로 정리했다. class User { public int idx { get; set; } public string name { get; set; } public int age { get; set; } } User 클래스를 가지고 List 를 생성하여 진행할 것이다. public static void Main(string[] args) { List users = new List() { new User() { idx = 1, name = "김씨", age = 30 }, .. 2022. 10. 18. [C#] JsonConvert null 해결방법 JSON 데이터를 직렬화/역직렬화할때 null로 인한 오류가 발생하는 경우가 있다. 이런 경우 해결법이 몇 가지 있는데 간단하게 확인해보자. { "id":0, "name":null, "nickName":null, "createTime":null, "claimTime":null } 위와 같은 데이터를 받는다고 가정하자. 'id' 필드를 제외한 나머지 값들은 모두 null 인 상태이다. class User { public int id { get; set; } public string name { get; set; } public string nickName { get; set; } public DateTime createTime { get; set; } public DateTime claimTime { ge.. 2022. 10. 13. [MAUI] 상대 바인딩 - 상위 항목에 바인딩 상대 바인딩 - 상위 항목에 바인딩 모드는 시작 전 트리에서 특정 유형의 부모 요소에 바인딩하는 데 사용된다. FindAncestor 모드는 Element 형식에서 파생되는 부모 요소에 바인딩하는 데 사용된다. FindAncestorBidningContext 모드는 부모 요소의 BindingContext에 바인딩하는 데 사용된다. FindAncestor 및 FindAncestorBindingContext 상대 바인딩 모드(상위 항목에 바인딩)를 사용할 때는 AncestorType 속성을 Type으로 설정해야 한다. 그러지 않으면 XamlParseException 이 throw 된다. Mode 속성이 설정되지 않은경우, AncestorType 속성을 Element에서 파생된 형식으로 설정하면 Mode 속성.. 2022. 10. 11. [MAUI] 상대 바인딩 - 자기 자신에게 바인딩 상대 바인딩중 자기 자신에게 바인딩하는 방법을 알아보자. 자기 자신에게 바인딩하는 방법은 RelativeSource 속성을 Self로 지정하여 사용한다. 요소의 속성을 다른 속성에 바인딩할 때 사용한다. 예제) 해당 예제에서 width 속성 값을 height 속성에 바인딩 하였다. 해당 두 속성의 값은 동일하다. 바인딩 시 요소의 속성을 바인딩 시 유형이 같아야 하며 만약 다르다면 변환기를 통해 지정하면 된다. 더보기 [참고] https://learn.microsoft.com/ko-kr/dotnet/maui/fundamentals/data-binding/relative-bindings#bind-to-self 상대 바인딩 - .NET MAUI .NET MAUI 상대 바인딩은 바인딩 대상의 위치를 기준으로 .. 2022. 10. 4. [MAUI] 상대 바인딩 상대 바인딩 이란? MAUI의 상대 바인딩은 바인딩 대상의 위치를 기준으로 바인딩 소스를 설정하는 기능이다. 상대 바인딩은 RelativeSource 태그 확장을 사용하여 생성되며, 바인딩 식의 Source 속성으로 설정된다. RelativeSource 태그 확장 RelativeSource는 RelativeSourceExtension 클래스에서 지원된다. Mode : 바인딩 대상의 위치에 상대적으로 바인딩 소스의 위치를 설명한다. AncestorType (Type : Type) : Mode 속성이 FindAncestor 인 경우 살펴보아야 할 상위 항목 유형이다. AncestorLevel (Type : int) : Mode 속성이 FindAncestor인 경우 살펴보아야 할 선택적 상위 항목 수준이다. .. 2022. 10. 4. [MAUI] 바인딩 변환기 속성(IValueConverter) 값 변화기 클래스에는 속성 및 일반 매개 변수가 있을 수 있다. 값 변환기는 원본에서 대상에 대한 제네릭 형식의 개체로 변환할 수 있다. 예시 BoolToObjectConvert Class class BoolToObjectConvert : IValueConverter { public T TrueObject { get; set; } public T FalseObject { get; set; } public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return (bool)value ? TrueObject : FalseObject; } public object ConvertBack(object v.. 2022. 9. 23. [MAUI] 바인딩 값 변환기 (IValueConverter) MAUI 바인딩은 일반적으로 원본 속성에서 대상 속성으로 데이터를 전송하고 경우에 따라 대상 속성에서 원본 속성으로 데이터를 전송한다. 데이터 바인딩의 속성을 이용하여 다른 형식의 변환을 원하는 경우 IValueConverter 인터페이스를 구현하는 클래스에 일부 특수한 코드를 작성하면 된다. IValueConverter를 구현하는 클래스를 값 변환기 / 바인딩 변환기 / 바인딩 값 변환기라고 한다. IValueConverter IValueConverter는 기본적으로 Convert, ConvertBack 메서드를 갖고 있다. 바인딩 값 변환을 하기 위한 인터페이스이다. Convert public object Convert(object value, Type targetType, object paramet.. 2022. 9. 23. [MAUI] 바인딩 경로 - Path .NET MAUI에서 클래스의 속성(Binding)을 단일 속성, 하위 속성 or 컬렉션의 멤버를 Path로 설정할 수 있다. 위의 예제는 TimePicker 를 통해 Path를 설정하는 방식을 알 수 있다. 쉽게 생각하면 BInding 된 속성에 대해서 어떤 값을 사용할지 정한다고 보면 된다. 더보기 [참고] https://learn.microsoft.com/ko-kr/dotnet/maui/fundamentals/data-binding/binding-path 바인딩 경로 - .NET MAUI .NET MAUI 데이터 바인딩을 사용하여 Binding 클래스의 Path 속성을 사용하여 하위 속성 및 컬렉션 멤버에 액세스할 수 있습니다. learn.microsoft.com 2022. 9. 21. [MAUI] Viewmodel 바인딩 데이터 바인딩에서 Viewmodel을 사용하는 경우 Viewmodel은 데이터 바인딩 원본이다. Viewmodel의 속성 값이 변경될 때 알림 메커니즘을 이용하여 속성 값을 변경한다. 알림 메커니즘은 INotifyPropertyChanged 인터페이스이며 PropertyChanged라는 이벤트를 정의한다. 이 인터페이스를 구현하는 클래스는 일반적으로 public 속성 중 하나가 값을 변경할 때 이벤트를 발생합니다. 예시 간단하게 색상을 변경하는 예시이며 Hue, Saturation, Luminosity 값들을 받아 색상을 재정의하는 예시이다. ColorViewModel 클래스 public class ColorViewModel : INotifyPropertyChanged { public event Prop.. 2022. 8. 24. [MAUI] 바인딩 모드 .NET MAUI 바인딩 가능 속성에는 바인딩 가능한 속성을 만들 때 설정되고 개체의 속성에서 사용할 수 있는 기본 바인딩 모드가 있다. 기본 바인딩 모드는 속성이 데이터 바인딩 대상일 때 적용되는 모드를 나타낸다. Rotaion, Scale, Opacity와 같은 대부분의 속성에 대한 기본 바인딩 모드는 OneWay이다. 데이터 바인딩 대상인 경우에는 대상 속성이 원본에서 설정된다. 여기서 말하는 대상은 데이터 바인딩이 설정된 개체이며, 원본은 데이터 바인딩에서 참조하는 개체 이다. 종류 Default OneWay : 원본에서 대상으로 전송 OneWayToSource : 대상에서 원본으로 전송 TwoWay : 원본과 대상 간에 양방향으로 전송 OneTime : 원본에서 대상으로 전송되지만 변경되는 경우.. 2022. 8. 17. [MAUI] 데이터 바인딩 기본 사항 .NET MAUI는 데이터 바인딩을 사용하며 두 개체의 속성을 연결하여 한 개체의 변경으로 다른 개체가 변경되도록 할 수 있다. 해당 기능은 매우 유용한 기능이며 데이터 바인딩을 코드에서 완전히 정의할 수 있지만 XAMl은 바로 가기 및 편의를 제공해준다. 데이터 바인딩 데이터 바인딩은 '원본'과 '대상'이라는 두 개체의 속성을 연결해준다. 쉽게 말해 서로 간의 속성이 연결이 되어 반응을 하는 것이다. 데이터 바인딩이 이루어지기 위해서는 두 단계가 필요하다. BindingContext 대상 개체의 속성을 원본 개체로 설정해야 한다. SetBinding 메서드는 대상 개체에서 호출하여 해당 개체의 속성을 원본 개체의 속성에 바인딩 해야 한다. 대상 속성은 바인딩 가능한 속성이여야 한다. 즉, 대상 개체가 .. 2022. 8. 16. [C#] lock 문 사용법 소개 lock 문은 지정된 개체에 대한 상호 배제 잠금을 획득하여 명령문 블록을 실행한 다음, 잠금을 해제한다. 잠금이 유지되는 동안 잠금을 보유하는 스레드(Thread)는 잠금을 다시 획득하고 해제할 수 있다. 쉽게 말해 다른 하나의 스레드가 잠금을 획득하면 다른 스레드는 기다리고 있다 잠금이 해제될 때까지 기다리고 잠금이 풀렸을 경우 또 다른 하나의 스레드가 잠금을 얻는 거다. lock 문이 필요한 경우는 멀티스레드(Multi-Thread)인 경우 동일한 필드에 액세스 하여 잘못된 결과를 도출을 막기 위하여 사용된다. 이런 경우를 Thread-Unsafe 하다고 한다. 사용법 사용법은 아주 간단하다. lock 호출하여 브레이스로 감싸면 된다. lock(x) { // code.. } 여기서 x는 참조 .. 2022. 8. 3. [C#] 멀티스레드 (Multi-Thread) 멀티스레드(Multi-Thread) or 다중 스레드는 한 번에 여러 개의 스레드를 사용하는 방식이며 CPU의 성능을 활용하는 프로그래밍 기법이다. 한 번에 여러 개의 작업 or 명령을 실행할 수 있다. 기본적으로 프로세스(process) 실행시 메인 스레드(Thread)가 실행되는데 바로 이것을 메인 스레드(Main Thread)라고 한다. 멀티스레드가 사용되는 경우는 통신, 파일 로딩, DB 등 한번에 여러 개의 작업이 필요시 사용된다. 기본적인 스레드(Thread) 사용 방법은 이전 포스팅을 해놨기 때문에 사용법을 모르는 분들은 이전 포스팅을 보고 오길 바라며 해당 링크를 남겨두겠다. [2022.07.28 - [Programming/C#] - [C#] 스레드(Thread)] 메서드 3개를 서로 다른.. 2022. 8. 2. [C#] Sequence contains no elements 오류 해결 Sequence contains no elements Sequence contains no elements C# LINQ 사용시 'Sequence contains no elements' 라는 오류가 발생하면 일반적으로 First() or Single() 명령을 사용해서 발생한다. First() or Single() 을 호출시 결과값이 없다면 'Sequence contains no elements' 오류가 발생한다. 그 이유는 아래의 이미지를 보면 알 수 있다. 해당 오류를 해결하는 방법은 아주 간단하다. FirstOrDefault() 로 변경하면 해결 가능하다. 2022. 7. 5. [C#] JSON 을 Class 로 자동 생성 (JSON to Class Generator) 만약, 당신이 JSON을 구조를 Class로 정의하기 위해 Property 속성을 50개 넘게 정의해야 한다면 어떻겠는가? Class를 만들다 시간을 다 보내게 되고 업무의 시간이 늘어나 불편함이 늘어날 것이다. 이를 해결하기 위해 JSON string을 Class 구조로 자동 생성하는 방법을 알 수 있다. 방법 1. Visual Studio 만약, 사용자가 Visual Studio를 사용한다면 간단하게 해결 가능하다. 글쓴이는 현재 Microsoft Visual Studio 2022 버전을 사용하고 있어 해당 버전으로 알려주겠다. 버전에 따라 크게 다른 부분은 없겠지만 구버전인 경우 해당 기능이 없을 수도 있으니 참고 바란다. 위치 : 편집 > 선택하여 붙여 넣기 JSON을 클래스토 붙여 넣기 XML을.. 2022. 7. 1. [C#] The format of value 'application/json;charset=UTF-8' is invalid 최근 HttpClinet 로 수정중 해당 오류가 발생하게 되어 겪은 내용을 공유하고자 한다. 해당 문제는 생각보다? 쉬운 문제였다. HttpClient의 'Contet-Type' 설정에서 'charset=UTF-8' 을 지원하지 않는다는 것이다. Before > application/json;charset=UTF-8 After > application/json 개인적인 생각으로 Bug 일 것같은 생각이 들지만 현재 상황에서는 위에 처럼 수정해서 사용해야 할 것 같다. 대략적으로 HttpClient 짠 코드를 같이 첨부해두겠다. HttpRequestMessage 를 가지고 진행했으며 성공한 코드를 올려두었기때문에 만약, 참고해서 안된다면 댓글로 남겨주시면 도움을 드리겠습니다. HttpClient httpC.. 2022. 5. 31. [C#] SYSLIB0014: WebRequest, HttpWebRequest, ServicePoint, WebClient는 더 이상 사용되지 않습니다. .Net 6 버전업을 하며 경고를 해결하던중 SYSLIB0014 해당 경고에 대해서 작성하게 되었다. 내가 진행하는 프로젝트에서 WebRequest(), HttpWebRequest() 를 사용하는데 해당 부분이 .Net 6 버전에서는 더이상 지원을 하지 않는다고 한다. 그래서 MS Docs 에 해결방법을 찾아 갔다. 그렇다. HttpClinet 를 사용하라고 한다. 아니면 경고 코드를 무시하면 되긴한데 RestSharp 도 최근 버전에서는 HttpClient 기반으로 비동기 형식으로 바뀌고 있기때문에 HttpClinet 로 수정하기로 했다. HttpClinet 에 대해서 아직 적용중이여서 추후 정리 자료를 올릴 예정이다. MS Docs의 HttpClinet 링크를 공유해놓겠다. [관련자료] SYSLIB0.. 2022. 5. 31. [Xamarin] DataBinding 해당글에서는 DataBinding 하는 방법을 알 수 있다. 예시를 통해 DataBinding 을 자세하게 알 수 있다. Event : Slider 변경 Target1 : Label Padding 값 변경 Target2 : Label FontSize 값 변경 1-1. CS 파일에서 핸들링 xaml 파일 cs 파일 public DataBind() { InitializeComponent(); InitProperty(); } private void xSlider_ValueChanged(object sender, ValueChangedEventArgs e) { xLabel01.Padding = (int)xSlider01.Value; xLabel02.FontSize = (int)xSlider01.Value; } .. 2022. 3. 8. 이전 1 2 다음 반응형