ที่เชื่อมโยงปุ่มควบคุมเพื่อข้อมูล(WPF)

0

คำถาม

ฉันทำงานบนโปรแกรมแสดง 20 กราฟิปุ่มควบคุมในหน้าต่างหลัก(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 defining เป็นสิ่งเรียก 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,เนื้อหาและทูลทิป. งั้นทั้งหมดนี้ Bouton วัตถุงจะถูกจัดเก็บไว้ในรายชื่อคนจะได้ปลอดภัย

ตอนนี้ฉันต้องการใช้ DataBinding ระหว่างของฉัน Bouton รายชื่อและกราฟิควบคุมของหน้าต่างหลักที่จะแสดงเนื้อหาข้อความและข้อความบนทูลทิปในแต่ละปุ่ม. อยู่ในหน้าต่างหลักฉันใช้ติดตามรหัส:

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

อยู่ไหน lst คือรายการชุดสะสมอย่างถูกต้องสามารถใช้ถอ.

แต่ฉันไม่รู้วิธีที่จะทำให้ค databinding ทำงานบนปุ่มควบคุม ผมต้องทำยังไงให้แต่ละ 20 ปุ่มควบคุมอย่างถูกต้องเชื่อมโยงไปยังที่สัมพันธ์กัน Bouton ธ(บรรจุอยู่ใน Boutons คลังภาพ)? ฉันหมายถึงได้ยังไง Button1 ควบคุมให้มันใช้เส้นสายออกจาก Bouton1 สิ่งที่ Button2 ควบคุมจังข้อความจาก Bouton2 สิ่งและดังนั้นอยู่จนกว่า Button20 ควบคุมและ Bouton20 วัตถุ?

ขอบคุณสำหรับความช่วยเหลือ โปรดจำไว้ฉันเป็นเชิดแพลตตินั่มทั้งหมดไปใช่กับ WPF และนี่คือคนแรกของฉั WPF กับโครงการมองเห็นสตูดิโอ

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

คำตอบที่ดีที่สุด

0

ฉันคิดว่างานง่ายสุดใช้ตัวเลือกน่าจะเพื่อห่อของคุณปุ่มใน UserControl.

นี่ UserControl งั้นก็มีทรัพย์สินของประเภท Bouton (ไม่ใช่เยี่ยมตั้งชื่อ btw. -ถึงแม้มันจะเป็นแตกต่างภาษาคำว่า"ปุ่ม"อยู่ก่อนแล้ว,ดังนั้นค่อนข้ายังกำกวมเนื่องจา. เป็นคนที่ไม่ใช่ภาษาอังกฤษโดยกำลำโพงด้วยตัวเองแล้วฉันก็แนะนำอันถูกใช้เพื่อตั้งชื่อภาษาอังกฤษมันจะช่วยคุณหลายของปวดหัวนานนักหรอกแต่นั่นอาจเป็น subjective)

คุณสามารถปิดแผลได้โดยตรงนั้นทรัพย์สินใน UserControl เป็นต้นแบบ. ทั้งหมดที่คุณต้องทำคือกำหนดกั UserControl ที่ถูกต้องปุ่มข้อมูล

eg.

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 แทนที่จะเป็น inheriting จากปุ่ม? ใน UserControl คุณเป็นอย่างง่ายดายทะเบียนเป็นคลิกเหตุการณ์สำหรับพปุ่มคุณที่อยู่ในต้นแบบ.
Shrimperator

โอเคฉันจะลองเรื่องนี้ ขอบคุณ
Bruno Barral

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่