सवाल सी # में एप्लीकेशन सेटिंग्स में डब्ल्यूपीएफ गुणों को बांधने का सबसे अच्छा तरीका?


सी # में एप्लीकेशन सेटिंग्स में डब्ल्यूपीएफ गुणों को बांधने का सबसे अच्छा तरीका क्या है? क्या Windows फॉर्म एप्लिकेशन में कोई स्वचालित तरीका है? के समान यह प्रश्न, कैसे (और यह संभव है) क्या आप डब्ल्यूपीएफ में एक ही काम करते हैं?


44
2017-09-30 19:20


मूल




जवाब:


आप सीधे विजुअल स्टूडियो द्वारा बनाई गई स्थिर वस्तु से जुड़ सकते हैं।

अपने विंडोज़ घोषणा में जोड़ें:

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); 
}

96
2017-11-05 00:08



मैं आश्चर्यचकित था कि TwoWay बाध्यकारी वास्तव में दोनों तरीकों से काम करता है। अच्छा लगा। +1 - Adam Badura
वहां खोजकर्ताओं को ध्यान दें, TwoWay आवश्यक है या सेटिंग्स को सहेजा नहीं जाएगा। कोशिश करने और उसे समझने के लिए परेशान करना। - Will
थोड़ा अलग वाक्यविन्यास (और एक अच्छा परिचय) के लिए, पढ़ें blogs.msdn.com/b/patrickdanino/archive/2008/07/23/... - Pat
हालांकि यह पूछे जाने वाले प्रश्न का एक बड़ा जवाब है, मैंने पाया है कि बाध्यकारी वास्तव में संपादन सेटिंग्स के उपकरण / विकल्प संवाद शैली के लिए सही उत्तर नहीं है; जब तक उपयोगकर्ता ठीक बटन पर क्लिक नहीं करता तब तक आप विजेट मानों को गुणों में प्रतिलिपि नहीं बनाना चाहते हैं। ओके क्लिक हैंडलर में ऐसा करने के लिए स्पष्ट कोड का उपयोग करना है कि रद्द करें बटन को सभी प्रदान किए गए हैंडलर == सत्य पर एक हैंडलर की आवश्यकता नहीं है - Peter Wone
@PeterWone को उन सेटिंग्स से बने रहने के लिए जिन्हें आप प्रॉपर्टी संपादन संवाद पर Properties.Settings.Default.Save () का उपयोग करने के लिए आवश्यक हैं, इसलिए आपके परिदृश्य में संपत्ति संपादन संवाद पर कार्रवाई रद्द करें, आप Properties.Settings.Default.Reload ( ) [और ठीक है आप सहेजें कॉल करेंगे] - George Birbilis


यदि आप एक हैं VB.Net डेवलपर इसका प्रयास कर रहा है, जवाब एक स्मीज अलग है।

xmlns:p="clr-namespace:ThisApplication"

ध्यान दें। प्रकृतियां वहां नहीं हैं।


अपने बाध्यकारी में यह MySettings.Default है, सेटिंग्स.डिफॉल्ट की बजाय - क्योंकि app.config इसे अलग-अलग स्टोर करता है।

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

मेरे बालों को खींचने के बाद, मैंने यह खोज लिया। आशा करता हूँ की ये काम करेगा


8
2018-02-10 17:39





मुझे स्वीकार्य उत्तर पसंद है, हालांकि मैं एक विशेष मामले में भाग गया। मेरे टेक्स्ट बॉक्स को "केवल पढ़ने" के रूप में सेट किया गया था ताकि मैं केवल कोड में इसका मूल्य बदल सकूं। मुझे समझ में नहीं आया कि मूल्य को सेटिंग्स पर वापस क्यों नहीं भेजा गया था, हालांकि मेरे पास मोड "टूवे" था।

फिर, मुझे यह मिला: http://msdn.microsoft.com/en-us/library/system.windows.data.binding.updatesourcetrigger.aspx

डिफ़ॉल्ट डिफ़ॉल्ट है, जो लक्ष्य निर्भरता गुण का डिफ़ॉल्ट UpdateSourceTrigger मान देता है। हालांकि, अधिकांश निर्भरता गुणों के लिए डिफ़ॉल्ट मान PropertyChanged है, जबकि टेक्स्ट प्रॉपर्टी में लॉस्टफोकस का डिफ़ॉल्ट मान है

इस प्रकार, यदि आपके पास IsReadOnly = "True" प्रॉपर्टी के साथ टेक्स्ट बॉक्स है, तो आपको बाध्यकारी कथन में UpdateSourceTrigger = PropertyChanged मान जोड़ना होगा:

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

7
2017-10-19 20:24



सबसे अच्छा अभ्यास इस तरह से करना है, imho। - Will


सबसे आसान तरीका किसी ऑब्जेक्ट से जुड़ना होगा जो आपकी एप्लिकेशन सेटिंग्स को गुणों के रूप में उजागर करता है या उस ऑब्जेक्ट को स्टेटिक रिसोर्स के रूप में शामिल करता है और उसमें बाध्य करता है।

एक और दिशा जो आप ले सकते हैं वह स्वयं का निर्माण है मार्कअप एक्सटेंशन इसलिए आप बस PropertyName = "{ApplicationSetting SomeSettingName}" का उपयोग कर सकते हैं। एक कस्टम मार्कअप एक्सटेंशन बनाने के लिए आपको विरासत की आवश्यकता है MarkupExtension और कक्षा के साथ एक सजाने के लिए MarkupExtensionReturnType विशेषता। जॉन बोवेन एक कस्टम मार्कअप एक्सटेंशन बनाने पर पोस्ट करें जो प्रक्रिया को थोड़ा स्पष्ट कर सकता है।


5
2017-10-01 09:25





क्रिस, मुझे यकीन नहीं है कि यह एप्लीकेशन सेटिंग्स को बांधने का सबसे अच्छा तरीका है, लेकिन इस तरह मैंने इसे किया परिहास युक्त

1) उस सेटिंग के लिए एक निर्भरता गुण बनाएं जिसे आप विंडो / पेज / उपयोगकर्ता नियंत्रण / कंटेनर में बांधना चाहते हैं। यह मामला है कि मेरे पास ध्वनि चलाने के लिए उपयोगकर्ता सेटिंग है।

    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();
    }

2) कन्स्ट्रक्टर में, एप्लिकेशन सेटिंग्स से मेल खाने के लिए प्रॉपर्टी वैल्यू शुरू करें

      PlaySounds = Properties.Settings.Default.PlaySounds;

3) एक्सएएमएल में संपत्ति बांधें

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

आप पूर्ण डाउनलोड कर सकते हैं विटिल स्रोत इसे क्रिया में देखने या बस ब्राउज़ करने के लिए विकल्प विंडो के लिए कोड


3
2017-09-30 23:30



साशा द्वारा विधि (अन्य उत्तर देखें) छोटा है - decasteljau
उह, क्या होता है जब आपके पास 100+ सेटिंग्स होती हैं? : हे - James M


मैं इसे ViewModel के माध्यम से करना चाहता हूं और XAML में सामान्य के रूप में बाध्यकारी करना चाहता हूं

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

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

2
2017-07-01 15:17



मुझे लगता है कि यह ज्यादातर मामलों के लिए सबसे अच्छा समाधान है, क्योंकि यह स्थिरता को लागू करता है। यदि यूआई सेटिंग्स से या कहीं और से आता है तो यूआई के लिए कोई फर्क नहीं पड़ता है। - Florian


यह भी पढ़ें इस बेबीस्मैश में यह कैसे किया जाता है पर लेख

यदि आपको परिवर्तन अधिसूचना की आवश्यकता है तो आपको केवल डीओ (एलन के उदाहरण की तरह) के साथ सेटिंग्स को वापस करने की आवश्यकता है! पीओसीओ सेटिंग्स कक्षा के लिए बाध्यकारी भी काम करेगा!


0
2017-10-01 06:50