본문 바로가기

전체 글

(42)
[WPF] xaml에서 조건 사용 (조건부 컨트롤 숨기기) WPF에서 조건에 따라 컨트롤을 숨기려면 Visibility 속성을 사용해서 ViewModel에서 어쩌고 저쩌고... 오늘은 xaml에서 간단한 조건에 따라 컨트롤의 속성을 바꿔보도록 하자. 간단하게 텍스트박스에 입력된 텍스트를 오른쪽 버튼의 툴팁으로 표시해 주는 View를 만들었다. View.xaml ViewModel.cs namespace WpfMvvm.ViewModels { internal class View2ViewModel : ViewModelBase { private string _toolTipText; public string ToolTipText { get => _toolTipText; set => SetProperty( ref _toolTipText, value ); } } } 이렇게 마..
[WPF] 크로스 스레드 문제 해결 WPF에서 역시 크로스 스레드 문제가 발생할 수 있는데 보통 메인 스레드가 아닌 다른 스레드에서 뷰모델의 속성 값을 변경하려고 시도하거나 코드 비하인드에서 컨트롤을 수정하려 할 때 발생할 수 있다. 이러한 경우 WinForm에서의 Invoke() 대신 Dispatcher.Invoke() 를 사용하여 해결할 수 있다. public class View1 : Window { public View1() { InitializeComponent(); } public void button_Click(object sender, RoutedEventArgs e) { new Thread(myThread) { IsBackground = true }.Start(); } private void myThread() { for( ..
[WPF] ViewModel이 아닌 다른 클래스의 속성에 바인딩하기 WPF로 개발을 하다 보면 종종 DataContext로 지정될 ViewModel 객체가 아닌 다른 클래스로부터 데이터를 가져와야 하는 상황이 발생할 수 있다. 아래 코드를 보자. namespace MyProject.Core { public class ObjectManager : BindableBase { private static ObjectManager _instance; public static ObjectManager Instance => _instance ??= new(); private string _myString = string.Empty; public string MyString { get => _myString; set => SetProperty( ref _myString, value )..
[WPF] DependencyProperty에 대해서 - RelativeSource 사용하여 Binding하기 앞선 글에서 DependencyProperty를 사용하여 UserControl의 코드비하인드에 정의한 사용자 정의 속성에 바인딩을 해보았다. [WPF] DependencyProperty에 대해서 WPF에서 속성과 속성 간의 Binding을 통해 데이터를 View로 가져오거나 ViewModel로 보낼 수 있음을 앞선 글에서 알아보았다. 이러한 Binding이 이뤄지기 위해서는 반드시 필요한 조건이 있는데, Binding 하 cs-solution.tistory.com 바인딩을 하기 위해 PropertyMetadata에 PropertyChangedCallBack 메서드를 사용하여 사용자 정의 속성값이 변경되었을 때 각 컨트롤에 변경된 값들을 직접 지정해줬음을 기억할 것이다. 이번 글에서는 PropertyCha..
[C#] 문자열 05 - IndexOf() 문자열 찾기 String 클래스의 IndexOf() 메서드로 문자열 내에서 특정 문자 또는 부분 문자열이 시작되는 위치를 찾을 수 있다. string.IndexOf(string) - 문자열 내에서 지정된 문자열이 처음 등장하기 시작하는 인덱스를 반환한다. 문자열이 등장하지 않을 경우 -1을 반환한다. 자매품으로 string.IndexOf(char)도 가능하다. // 14 출력 Console.WriteLine("When you have faults, do not fear to abandon them.".IndexOf("faults").ToString()); // -1 출력 string str = "Age is no guarantee of maturity."; Console.WriteLine(str.IndexOf("th..