Programing

설정에 정의 된 값에 바인딩

crosscheck 2020. 10. 29. 07:51
반응형

설정에 정의 된 값에 바인딩


WPF에서 설정에 정의 된 값으로 바인딩을 사용할 수 있습니까? 가능하다면 샘플을 제공해주세요.


먼저 설정이 정의 된 네임 스페이스를 디자인 할 사용자 지정 XML 네임 스페이스를 추가해야합니다.

xmlns:properties="clr-namespace:TestSettings.Properties"

그런 다음 XAML 파일에서 다음 구문을 사용하여 기본 설정 인스턴스에 액세스합니다.

{x:Static properties:Settings.Default}

따라서 최종 결과 코드는 다음과 같습니다.

<ListBox x:Name="lb"
         ItemsSource="{Binding Source={x:Static properties:Settings.Default},
                               Path=Names}" />

출처 : WPF-설정에 정의 된 속성에 컨트롤을 바인딩하는 방법은 무엇입니까?


참고 : @Daniel 및 @nabulke가 지적했듯이 설정 파일의 액세스 수정 자를로 설정 Public하고 범위다음으로 설정 하는 것을 잊지 마십시오.User


위의 솔루션은 작동하지만 매우 장황하다는 것을 알았습니다. 대신 사용자 정의 마크 업 확장을 사용할 수 있습니다. 다음과 같이 사용할 수 있습니다.

<ListBox x:Name="lb" ItemsSource="{my:SettingBinding Names}" />

이 확장에 대한 코드는 다음과 같습니다.

public class SettingBindingExtension : Binding
{
    public SettingBindingExtension()
    {
        Initialize();
    }

    public SettingBindingExtension(string path)
        :base(path)
    {
        Initialize();
    }

    private void Initialize()
    {
        this.Source = WpfApplication1.Properties.Settings.Default;
        this.Mode = BindingMode.TwoWay;
    }
}

자세한 내용은 여기 : http://www.thomaslevesque.com/2008/11/18/wpf-binding-to-application-settings-using-a-markup-extension/


CSharper의 대답은 (다른 WPF 응용 프로그램을 분명히 99.999 %는 달리,하지 C #) VB.NET에서 코딩 내 WPF 응용 프로그램에 대한 작업을하지 않았다 @ 내가 그 불평 지속적인 컴파일러 오류가있어 같은 Settings에서 찾을 수 없습니다 MyApp.Properties가지 않을 것이다, 네임 스페이스 재건 후에도 멀리 떨어져 있습니다.

온라인에서 많은 검색을 한 후 대신 local내 응용 프로그램의 기본 창 XAML 파일에서 기본적으로 생성 된 XAML 네임 스페이스 를 대신 사용하는 것이 효과적 이었습니다 .

<Window
    <!-- Snip -->
    xmlns:local="clr-namespace:MyApp"
    <!-- Snip -->
><!-- Snip --></Window>

... 다음과 같은 방법을 사용하여 내 설정에 바인딩합니다 (여기서는 기본 Friend 액세스 수정자를 사용하여 사용자 MyBooleanSetting유형 Boolean및 범위 의 프로젝트 속성에 정의한 설정 ).

<CheckBox IsChecked="{Binding Source={x:Static local:MySettings.Default}, Path=MyBooleanSetting, Mode=TwoWay}"
          Content="This is a bound CheckBox."/>

설정이 실제로 저장되었는지 확인하려면

MySettings.Default.Save()

... 코드 숨김의 어딘가에 (예 : 파일 Me.Closing이벤트 MainWindow.xaml.vb).

(이 Visual Studio 포럼 게시물 에서 영감을 얻었습니다. Muhammad Siddiqi의 답변을 참조하십시오.)

참고 URL : https://stackoverflow.com/questions/845030/bind-to-a-value-defined-in-the-settings

반응형