programing

WPF 속성을 C#의 애플리케이션 설정에 바인딩하는 가장 좋은 방법은 무엇입니까?

abcjava 2023. 5. 26. 20:23
반응형

WPF 속성을 C#의 애플리케이션 설정에 바인딩하는 가장 좋은 방법은 무엇입니까?

C#의 응용 프로그램 설정에 WPF 속성을 바인딩하는 가장 좋은 방법은 무엇입니까?Windows Forms 응용 프로그램과 같은 자동 방법이 있습니까? 질문과 유사하게 WPF에서 동일한 작업을 수행하는 방법(그리고 가능합니까?

Visual Studio에서 만든 정적 개체에 직접 바인딩할 수 있습니다.

창 선언에 다음을 추가합니다.

xmlns:p="clr-namespace:UserSettings.Properties"

어디에UserSettings응용 프로그램 네임스페이스입니다.

그런 다음 올바른 설정에 바인딩을 추가할 수 있습니다.

<TextBlock Height="{Binding Source={x:Static p:Settings.Default}, 
           Path=Height, Mode=TwoWay}" ....... />

이제 응용 프로그램을 닫을 때와 같이 설정을 저장할 수 있습니다.

protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
    Properties.Settings.Default.Save();
    base.OnClosing(e); 
}

당신이 VB인 경우. 개발자가 이것을 시도하고 있지만, 답은 약간 다릅니다.

xmlns:p="clr-namespace:ThisApplication"

주의하십시오.속성이 없습니다.


당신의 바인딩에는 내 설정이 있습니다.설정 대신 기본값입니다.기본값 - app.config가 다르게 저장하기 때문입니다.

<TextBlock Height={Binding Source={x:Static p:MySettings.Default}, Path=Height, ...

제 머리를 조금 뽑고 나서, 저는 이것을 발견했습니다.도움이 되길 바랍니다.

합격된 답변이 마음에 드는데요, 특별한 경우에 부딪혔어요.텍스트 상자를 "읽기 전용"으로 설정하여 코드에서만 값을 변경할 수 있도록 했습니다.모드를 "TwoWay"로 설정했는데도 값이 다시 설정으로 전파되지 않는 이유를 이해할 수 없었습니다.

그리고 나서, 저는 이것을 발견했습니다: http://msdn.microsoft.com/en-us/library/system.windows.data.binding.updatesourcetrigger.aspx .http://msdn.microsoft.com/en-us/library/system.windows.data.binding.updatesourcetrigger.aspx

기본값은 Default이며, 이 값은 대상 종속성 속성의 기본 UpdateSourceTrigger 값을 반환합니다.그러나 대부분의 종속성 속성의 기본값은 PropertyChanged이고 Text 속성의 기본값은 LostFocus입니다.

따라서 IsReadOnly="True" 속성이 있는 텍스트 상자가 있는 경우 UpdateSourceTrigger=BindingChanged 값을 Binding 문에 추가해야 합니다.

<TextBox Text={Binding Source={x:Static p:Settings.Default}, Path=myTextSetting, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged} ... />

가장 쉬운 방법은 응용 프로그램 설정을 속성으로 표시하는 개체에 바인딩하거나 해당 개체를 정적 리소스로 포함하여 바인딩하는 것입니다.

PropertyName=을 사용할 수 있도록 자체 Markup Extension을 만드는 것도 방법입니다."{ApplicationSetting SomeSettingName}"입니다.사용자 지정 마크업 확장을 만들려면 MarkupExtension을 상속하고 클래스를 MarkupExtensionReturnType 특성으로 장식해야 합니다.John Bowen은 프로세스를 조금 더 명확하게 만들 수 있는 사용자 지정 Markup Extension을 만드는 것에 대한 게시물을 가지고 있습니다.

크리스, 이것이 응용 프로그램 설정을 바인딩하는 가장 좋은 방법인지는 잘 모르겠지만, 위트에서는 이렇게 했습니다.

창/페이지/사용자 제어/컨테이너에서 바인딩할 설정에 대한 종속성 속성을 만듭니다.이 경우 소리를 재생할 수 있는 사용자 설정이 있습니다.

    public bool PlaySounds
    {
        get { return (bool)GetValue(PlaySoundsProperty); }
        set { SetValue(PlaySoundsProperty, value); }
    }

    public static readonly DependencyProperty PlaySoundsProperty =
        DependencyProperty.Register("PlaySounds", typeof(bool), typeof(Options),
        new FrameworkPropertyMetadata(false, new PropertyChangedCallback(OnPlaySoundsChanged)));

    private static void OnPlaySoundsChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
    {
        Properties.Settings.Default.PlaySounds = (bool)args.NewValue;
        Properties.Settings.Default.Save();
    }

생성자에서 응용 프로그램 설정과 일치하도록 속성 값을 초기화합니다.

      PlaySounds = Properties.Settings.Default.PlaySounds;

XAML에서 속성 바인딩

      <CheckBox Content="Play Sounds on new Tweets" x:Name="PlaySoundsCheckBox" IsChecked="{Binding Path=PlaySounds, ElementName=Window, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

전체 위트 소스를 다운로드하여 실행 중인 상태를 확인하거나 옵션 창에 대한 코드만 찾아볼 수 있습니다.

View Model을 통해 수행하고 XAML에서 일반적으로 바인딩을 수행합니다.

    public Boolean Value
    {
        get
        {
            return Settings.Default.Value;

        }
        set
        {
            Settings.Default.SomeValue= value;
            Settings.Default.Save();
            Notify("SomeValue");
        }
    }

BabySmash에서 수행되는 방법에 대한 이 기사도 읽어 보십시오.

변경 알림이 필요한 경우 DO로 설정만 백업하면 됩니다! POCO Settings 클래스에 바인딩할 수도 있습니다!

언급URL : https://stackoverflow.com/questions/154533/best-way-to-bind-wpf-properties-to-applicationsettings-in-c

반응형