2021년 11월 21일 일요일

WPF교육동영상,x:Static, Source를 통한 데이터 바인딩(DateTimeFormatInfo를 이용한 요일정보를 ListBox, TextBlock에 바인딩), WPF학원

 

 WPF교육동영상,x:Static, Source를 통한 데이터 바인딩(DateTimeFormatInfo를 이용한 요일정보를 ListBox, TextBlock에 바인딩), WPF학원

http://ojc.asia/bbs/board.php?bo_table=WPF&wr_id=169 


WPF교육동영상,x:Static, Source를 통한 데이터 바인딩(DateTimeFormatInfo를 이용한 요일정보를 ListBox, TextB

WPF교육동영상,x:Static, Source를 통한 데이터 바인딩(DateTimeFormatInfo를 이용한 요일정보를 ListBox, TextBlock에 바인딩)ElementName으로 바인딩의 소스를 명시하는 것 대신 Binding 클래스의 Source 프로퍼티를

ojc.asia


https://www.youtube.com/watch?v=8EA-LXKJpkI&list=PLxU-iZCqT52Cmj47aKB1T-SxI33YL7rYS&index=12 

https://www.youtube.com/watch?v=wgz3OyVqfY4&list=PLxU-iZCqT52Cmj47aKB1T-SxI33YL7rYS&index=13&t=1s 

  • ElementName으로 바인딩의 소스를 명시하는 것 대신 Binding 클래스의 Source 프로퍼티를 사용하여 바인딩 하는 것이 가능한데 Source 프로퍼티는 객체를 참조하고 Path는 객체의 프로퍼티를 참조한다.
  • Source를 사용하기 위한 한 가지 방법은 x:Static 마크업을 확장해야 되는데 x:Static은 XAML에서 클래스 내의 정적필드나 프로퍼티를 참조할 수 있게 한다.
  • System.Globalization 네임스페이스에 있는 DateTimeFormatInfo 클래스의 DayName 프로퍼티는 요일에 해당하는 문자열 배열을 반환하는 인스턴스 프로퍼티다. DateTimeFormatInfo 클래스는 두 개의 정적 프로퍼티를 제공하는데 InvariantInfo는 변함 없는 문화권을 지원하며 CurrentInfo는 사용자 자신의 현재 문화권을 지원한다.

C#에서는 다음과 같이 요일에 해당하는 문자열 배열을 현재 사용자의 문화권으로 지정한다.

string[] dayNames = DateTimeFormatInfo.CurrentInfo.DayNames;

  • MainWindow.xaml

<Window x:Class="DayNames.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:g="clr-namespace:System.Globalization;assembly=mscorlib"

        Title="MainWindow" Height="350" Width="525">

    <StackPanel>


        <!-- 한번만 바인딩 -->

        <ListBox Name="lstbox"

             HorizontalAlignment="Center"

             Margin="24"

             ItemsSource="{Binding 

                            Source={x:Static g:DateTimeFormatInfo.CurrentInfo},

                            Path=DayNames,

                            Mode=OneTime}" />


       <!-- 리스트박스의 SelectedItem 속성과 TextBlock의 Text속성을 바인딩 -->

        <TextBlock HorizontalAlignment="Center"

               Text="{Binding ElementName=lstbox, 

                                    Path=SelectedItem, Mode=OneWay}" />

    </StackPanel>

</Window>


  • 실행결과



#x:Static, #WPF데이터컨텍스트#데이터컨텍스트#WPF데이터바인딩#WPF교육#WPF강좌#WPF학원#DataBinding#WPFDataBinding

x:Static,WPF데이터컨텍스트, 데이터컨텍스트,데이터바인딩, WPF데이터바인딩, WPF교육, WPF강좌, WPF학원, DataBinding, WPFDataBinding

WPF동영상, WPF교육, WPF 사용자정의 엘리먼트와 ScrollBar 데이터 바인딩

 

WPF동영상, WPF교육, WPF 사용자정의 엘리먼트와 ScrollBar 데이터 바인딩

http://ojc.asia/bbs/board.php?bo_table=WPF&wr_id=168 


WPF동영상, WPF교육, WPF 사용자정의 엘리먼트와 ScrollBar 데이터 바인딩

WPF동영상, WPF교육, WPF 사용자정의 엘리먼트와 ScrollBar 데이터 바인딩비주얼 스튜디오 -> WPF 응용프로그램 -> 프로젝트명 : CustomElementBindingMyElement.cs(사용자 정의 Element)using System;using System.Globalizatio

ojc.asia


https://www.youtube.com/watch?v=8EA-LXKJpkI&list=PLxU-iZCqT52Cmj47aKB1T-SxI33YL7rYS&index=12 

https://www.youtube.com/watch?v=A0atwgTrcjY&list=PLxU-iZCqT52Cmj47aKB1T-SxI33YL7rYS&index=11&t=1s 

  • 비주얼 스튜디오 -> WPF 응용프로그램 -> 프로젝트명 : CustomElementBinding
  • MyElement.cs(사용자 정의 Element)

using System;

using System.Globalization;

using System.Windows;

using System.Windows.Media;


namespace CustomElementBinding

{

    /// //////////////////////////////////////////////////////////////

    // Number라는 double 타입의 프로퍼티를 정의하고

    // 이 프로퍼티는 NumberProperty라는 의존 프로퍼티의 지원을 받는다

    // FrameworkPropertyMetadata는 초기값 이이며, 프로퍼티에 변화가 생기면 

    // OnRender를 호출하여 화면을 갱신(Number 프로퍼티를 노출)한다.

    //////////////////////////////////////////////////////////////////

    public class MyElement : FrameworkElement

    {

        // 의존 프로퍼티 선언

        // 데이터 바인딩 통보 메커니즘은 이를 통해 저절로 확보된다.

        public static DependencyProperty NumberProperty;


        // static 생성자를 통한 의존 프로퍼티 생성

        static MyElement()

        {

            NumberProperty =

                DependencyProperty.Register("Number"typeof(double),

                                            typeof(MyElement),

                    new FrameworkPropertyMetadata(0.0,

                            FrameworkPropertyMetadataOptions.AffectsRender));

        }

         

        // DependencyProperty를 CLR 프로퍼티로 노출

        public double Number

        {

            set { SetValue(NumberProperty, value); }

            get { return (double)GetValue(NumberProperty); }

        }


        // MeasureOverride를 오버라이딩해 Size를 리턴하는데 원래 이함수는 자식

        // 엘리먼트를 돌면서  크기를 계산하고 업데이트하는 메소드 이다.

        // 이함수를 재정의 안하면 자식 컨트롤의 크기가 이상해 질 수 있다.

        // MyElement의 크기를 측정해서 FrameworkElement 파생클래스(MyElement)

        // 의 Size를 리턴하는 것이다.레이아웃을 만들 때 자동으로 호출된다.

        protected override Size MeasureOverride(Size sizeAvailable)

        {

            return new Size(200, 50);

        }


        // Number 프로퍼티를 보여주는 OnRender

        protected override void OnRender(DrawingContext dc)

        {

            dc.DrawText(

                new FormattedText(Number.ToString(),

                        CultureInfo.CurrentCulture, FlowDirection.LeftToRight,

                        new Typeface("Times New Roman"), 12,

                        SystemColors.WindowTextBrush),

                new Point(0, 0));

        }

    }

}


  • MainWindow.xaml

<Window x:Class="CustomElementBinding.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:src="clr-namespace:CustomElementBinding"

        Title="Custom Element Binding" Height="350" Width="525">

    <StackPanel>

        <!-- 처음 스크롤바는 MyElement의 Number 프로퍼티와 OneWayToSource 바인딩을 하므로 스크롤바의 값이 바뀌면 MyElement의 Number 속성도 바뀐다. 이때 아래쪽은 두번째 스크롤바의 Value 프로퍼티와 MyElement가 TwoWay로 바인딩 되었으므로 두번째 스크롤바도 같이 움직인다.-->

        <ScrollBar Orientation="Horizontal"

                   Margin="24" 

                   Maximum="100"

                   LargeChange="10"

                   SmallChange="1"  

                   Value="{Binding ElementName=simple, Path=Number, 

                                   Mode=OneWayToSource}" />


        <!-- 

        x:Name 속성은 FrameworkElement를 성속받지 않은 XAML 엘리먼트를 위한

        속성이다. MyElement가 동일 어셈블리상이므로 Name대신 x:Name사용

        -->

        <src:MyElement x:Name="simple"

                       HorizontalAlignment="Center" />


        <!-- 두번째 스크롤바를 움직이면 MyElement의 Number 속성도 바뀌지만

             이 값이 바뀐다고 이것이 첫번째 스크롤바와는 바인딩 되지 않으므로

             첫번째 스크롤바는 그대로 있다. -->             

        <ScrollBar Name="scroll"

               Orientation="Horizontal"

               Margin="24" 

               Maximum="100"

               LargeChange="10"

               SmallChange="1" 

               Value="{Binding ElementName=simple, Path=Number, 

                               Mode=TwoWay}" />


        <src:MyElement HorizontalAlignment="Center" 

                       Number="{Binding ElementName=scroll, Path=Value,

                                        Mode=OneWay}" />

    </StackPanel>

</Window>

  • 실행 결과


   

#WPF데이터컨텍스트#데이터컨텍스트#데이터바인딩#WPF데이터바인딩#WPF교육#WPF강좌#WPF학원#DataBinding#WPFDataBinding

WPF데이터컨텍스트, 데이터컨텍스트,데이터바인딩, WPF데이터바인딩, WPF교육, WPF강좌, WPF학원, DataBinding, WPFDataBinding

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...