जोड़ने के बटन पर नियंत्रण करने के लिए डेटा (WPF)

0

सवाल

मैं पर काम कर रहा हूँ एक आवेदन 20 ग्राफिक बटन नियंत्रण में एक MainWindow (Button1 के लिए Button20). प्रत्येक बटन नियंत्रण प्रदर्शित कर सकते हैं एक सामग्री स्ट्रिंग, और एक टूलटिप के रूप में डिजाइन का पालन करें :

<Button x:Name="button1" FontWeight="Bold" FontSize="15" Content="" HorizontalAlignment="Left" Margin="20,69,0,0" VerticalAlignment="Top" Width="92" Height="29" Click="Button_Click" Background="#FFFFFFFF" MouseEnter="button_MouseEnter">
        <Button.ToolTip>
            <Border Margin="-4,0,-4,-3" Padding="10" Background="Yellow">
                <Border.BitmapEffect>
                    <OuterGlowBitmapEffect></OuterGlowBitmapEffect>
                </Border.BitmapEffect>
                <Label x:Name ="lbl1" FontSize="20" Content="{Binding Path=ToolTip}">
                </Label>
            </Border>
        </Button.ToolTip>
        <Button.Effect>
            <DropShadowEffect/>
        </Button.Effect>
    </Button>

मैं को परिभाषित करने के लिए स्ट्रिंग सामग्री और टूलटिप स्ट्रिंग में प्रत्येक बटन के लिए एक XML फ़ाइल है, तो इस जानकारी को बदला जा सकता है संशोधित करके XML फ़ाइल है.

इस के लिए, मैं बनाया एक ViewModel परिभाषित एक वस्तु कहा जाता है Bouton (फ्रेंच में) :

public class Bouton : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    void Notify(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    int boutonNumber;
    public int BoutonNumber{ get { return boutonNumber; } set { boutonNumber= value; Notify("BoutonNumber"); } }
    string texteBouton;
    public string TexteBouton { get { return texteBouton; } set { texteBouton = value; Notify("TexteBouton"); } }
    string tooltip;
    public string Tooltip { get { return tooltip; } set { tooltip = value; Notify("ToolTip"); } }
    public Bouton(int nb, string tb, string tt)
    {
        BoutonNumber = nb;
        TexteBouton = tb;
        Tooltip = tt;
    }
}

जब पढ़ने को XML फ़ाइल, मैं बनाने के लिए 20 वस्तुओं के Bouton के साथ प्रकार के बारे में जानकारी boutonNumber, सामग्री और टूलटिप. तो इन सभी बूटोन वस्तुओं को संग्रहित कर रहे हैं एक सूची में संग्रह.

अब मैं चाहता हूँ करने के लिए DataBinding का उपयोग के बीच मेरे बूटोन सूची और ग्राफिक नियंत्रण पर MainWindow सक्षम होना करने के लिए सामग्री प्रदर्शित करने के लिए स्ट्रिंग और टूलटिप स्ट्रिंग पर प्रत्येक बटन । में MainWindow, मैं निम्नलिखित कोड :

public MainWindow()
    {
        InitializeComponent();
        List<Bouton> lst = Utilities.CreateList();
        this.DataContext = lst;
    }

जहां lst एक सूची संग्रह सही ढंग से प्रारंभ किया.

लेकिन मैं नहीं जानता कि कैसे बनाने के लिए databinding काम पर बटन नियंत्रित करता है । मैं कैसे कर सकते हैं में से प्रत्येक के 20 बटन नियंत्रण सही ढंग से लिंक करने के लिए इसी बूटोन वस्तु (में निहित Boutons संग्रह) ? मेरा मतलब है कैसे कर सकते हैं Button1 नियंत्रण पाने के अपने तार से Bouton1 वस्तु, Button2 नियंत्रण पाने के अपने स्ट्रिंग से Bouton2 वस्तु,,, और इतने पर जब तक Button20 नियंत्रण और Bouton20 वस्तु ?

आपकी मदद के लिए धन्यवाद. कृपया ध्यान दें मैं एक शुरुआत कर रहा हूँ के साथ WPF और यह मेरी पहली WPF परियोजना के साथ Visual Studio.

c# controls windows wpf
2021-11-22 16:00:24
1

सबसे अच्छा जवाब

0

मुझे लगता है कि सबसे आसान विकल्प के लिए किया जाएगा रैप करने के लिए अपने बटन में एक UserControl.

इस UserControl तो होता है एक संपत्ति के प्रकार Bouton नहीं है (महान नामकरण btw. - यहां तक कि अगर यह एक अलग भाषा में, शब्द "बटन" पहले से ही मौजूद है, तो इस बल्कि अस्पष्ट है । के रूप में एक गैर देशी अंग्रेजी वक्ता अपने आप को, मैं यह भी सुझाव के लिए इस्तेमाल हो रही के नामकरण के लिए अंग्रेजी में, यह आप को बचाने के सिर दर्द की बहुत सारी लंबे समय में, लेकिन हो सकता है कि व्यक्तिपरक )

आप कर सकते हैं तो बाँध सीधे करने के लिए है कि संपत्ति में UserControl के टेम्पलेट है । सब तुम्हें क्या करना है प्रत्येक आवंटित UserControl सही बटन डेटा.

उदाहरण के लिए ।

public class CustomButton : UserControl
{
    public Bouton ParsedButtonData { get; set; }

    public CustomButton()
    {
        DataContext = this;
        InitializeComponent();
    }
}

और में अपने UserControl के टेम्पलेट:

<Button ...>
    <Button.ToolTip>
        <Border ...>
            <Label Content="{Binding ParsedButtonData.Tooltip}" ...>
            </Label>
        </Border>
    </Button.ToolTip>
</Button>

आप कर सकते हैं तो जगह UserControl में अपने XAML इस तरह:

xmlns:ctrls="clr-namespace:MyProject.MyNamespace"

<ctrls:CustomButton name="myFirstButton"/>

अब सब तुम्हें क्या करना है है सुनिश्चित करें कि प्रत्येक CustomButton अपने ParsedButtonData सेट करने के लिए इसी डेटा. आप कर सकते हैं या तो इस सेट के लिए मैन्युअल रूप से प्रत्येक बटन में बनाया अपने XAML, या आप कर सकते हैं बनाने के CustomButtons के माध्यम से C# में पहली जगह में.

यदि आप बनाने के अपने UserControls XAML में, उदाहरण के लिए:

public void SomeMethod()
{
    myFirstButton.ParsedButtonData = lst[0];
}

वैकल्पिक रूप से, आप चाहते हो सकता है में देखो करने के लिए विस्तार ItemsControl. यह मूल रूप से बनाया के इस प्रकार के लिए आवेदन. एक ItemsControl एक ItemsSource जा सकता है, जो किसी भी संग्रह के प्रकार के रूप में इस तरह List<> या ObservableCollection<>. यह तब बनाता है अपने बच्चों से कि संग्रह की स्थापना, DataContext स्वचालित रूप से करने के लिए इसी तत्व में कहा कि सूची में.

के उदाहरण है कि के लिए किया जाएगा DataGrid या ListView. मुझे लगता है कि किया जा करने के लिए एक छोटे से अधिक शामिल हालांकि, अगर आप वास्तव में सिर्फ करना चाहते हैं स्थान का एक गुच्छा एक बटन पर एक ही दृश्य है ।

2021-11-22 17:47:49

मैं वास्तव में आपकी रुचि की सराहना के लिए मेरा सवाल है, अपने जवाब और विवरण के कोड को आप दे दिया है । मैं यह कोशिश एक देने के रूप में जल्द ही के रूप में संभव है. बहुत बहुत धन्यवाद आपकी मदद के लिए !
Bruno Barral

मैं इस कोड की कोशिश की कल. मैं अभी भी कुछ सवाल है : मैं कक्षा CustomButton inheritate से बटन (बजाय से UserControl के रूप में आप का सुझाव दिया है), लेकिन मैं एक त्रुटि संदेश के बारे में क्लिक करें घटना कहा जाता है, जो नहीं किया जा करने के लिए वर्तमान में CustomButton वर्ग. मैं हैरान हूँ के बाद से, आधार वर्ग (बटन) है, क्लिक करें घटना लागू किया है । मैं फोन करने की कोशिश की आधार है । क्लिक करें() से CustomButton लेकिन मैं अभी भी एक त्रुटि संदेश मिलता है. मैं क्यों समझ में नहीं आता क्लिक करें घटना में मौजूद नहीं है CustomButton, के रूप में यह मौजूद है में बटन वर्ग.
Bruno Barral

क्यों नहीं आप का उपयोग एक UserControl के बजाय विरासत में मिली बटन से? में एक UserControl, आप एक आसानी से रजिस्टर एक क्लिक घटना के लिए किसी भी बटन आप जगह में टेम्पलेट.
Shrimperator

ठीक है मैं यह कोशिश करेंगे. धन्यवाद ।
Bruno Barral

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में