सेट ListBox चेकबॉक्स सामग्री गतिशील रूप से

0

सवाल

मैं एक WPF उपयोगकर्ता नियंत्रण है, जो एक ListBox शामिल है कि CheckBoxes.

<UserControl x:Class="AC.CodA.WPF.UserControls.CheckedListBox"
             x:Name="Root"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d"
             d:Background="White">
    <StackPanel>
        <ListBox BorderThickness="0"
                 ItemsSource="{Binding ElementName=Root, Path=ItemsSource}">
            <ListBox.ItemContainerStyle>
                <Style TargetType="{x:Type ListBoxItem}">
                    <Setter Property="Focusable"
                            Value="False" />
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type ListBoxItem}">
                                <ContentPresenter />
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </ListBox.ItemContainerStyle>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <CheckBox IsChecked="{Binding IsChecked}"
                              Content="{Binding Item}">
                    </CheckBox>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        <Separator />
        <CheckBox x:Name="DeSelectAll"
                  Content="Select / deselect all"
                  Checked="DeSelectAll_Checked"
                  Unchecked="DeSelectAll_Unchecked" />
    </StackPanel>
</UserControl>

मैं का उपयोग कर रहा हूँ इस पर नियंत्रण पर एक और जगह:

<GroupBox Header="{Binding ElementName=Root, Path=Header, FallbackValue=Header}">
    <user:CheckedListBox ItemsSource="{Binding ElementName=Root, Path=Companies}" />
</GroupBox>

इस जगह पर, के Companies संपत्ति एक ObservableCollection<CheckedListBoxItem<Company>>.

CheckedListBoxItem के साथ एक वर्ग है bool IsChecked संपत्ति और सामान्य T Item संपत्ति.

अब, T Item कुछ भी हो सकता है. इस बिंदु पर मैं इस संपत्ति के रूप में सेट Content के CheckBox लेकिन सबसे अधिक बार इस परिणाम में कुछ अस्पष्ट की तरह AC.CodA.Scripting.Shared.Company.

वहाँ एक तरीका है करने के लिए सेट CheckBox Content बाहर के उपयोगकर्ता नियंत्रण? इस तरह से कुछ के साथ CheckBoxContent:

<GroupBox Header="{Binding ElementName=Root, Path=Header, FallbackValue=Header}">
    <user:CheckedListBox ItemsSource="{Binding ElementName=Root, Path=Companies}" CheckBoxContent="{Binding Item.Name}" />
</GroupBox>

और मेरा उद्देश्य इस:

<CheckBox IsChecked="{Binding IsChecked}"
          Content="{Binding CheckBoxContent}">
</CheckBox>
binding c# wpf
2021-11-23 14:51:41
1

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

1

जोड़ें CheckBoxContent निर्भरता संपत्ति के लिए अपने UserControl'एस कोड behind फ़ाइल:

public partial class CheckedListBox : UserControl
{
    ...

    public static readonly DependencyProperty CheckBoxContentProperty =
        DependencyProperty.Register(nameof(CheckBoxContent), typeof(object),
            typeof(CheckedListBox));

    public object CheckBoxContent
    {
        get { return GetValue(CheckBoxContentProperty); }
        set { SetValue(CheckBoxContentProperty, value); }
    }
}

...और बाँध में यह करने के लिए अपने XAML मार्कअप:

<CheckBox IsChecked="{Binding IsChecked}"
          Content="{Binding CheckBoxContent,
              RelativeSource={RelativeSource AncestorType=UserControl}}">
</CheckBox>
2021-11-24 15:02:23

Tnx के लिए जवाब है । मैं इस किया है की तरह आप का सुझाव दिया लेकिन यह कैसे होगा, मैं अब भर में इस CheckBoxContent का उपयोग करते समय CheckedListBox? एक वर्ग ले लो Company उदाहरण के लिए एक संपत्ति के साथ Name. मैंने कोशिश की है के बाद लेकिन सामग्री खाली है: <user:CheckedListBox ItemsSource="{Binding ElementName=Root, Path=Companies}" CheckBoxContent="{Binding Name}" />.
Krowi

यह काम करता है अगर आप निर्धारित करने के लिए संपत्ति के एक निरंतर स्ट्रिंग मूल्य, ई । g: CheckBoxContent="test"? तो बाध्यकारी करने के लिए Name विफल रहता है ।
mm8

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

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

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

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

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