Δεσμευτική από μια προσαρμοσμένη ιδιότητα

ψήφοι
0

Είμαι νέος στο φόρουμ και πολύ νέα για το Silverlight. Εγώ και ο συνεργάτης μου εργάζονται σε προσαρμοσμένη εφαρμογή. Χτίζουμε ένα σύστημα μενού που θα εμφανιστεί μόνο κουμπιά αν αυτό useris σε ένα καθορισμένο ρόλο. Μια νέα ιδιοκτησία δημιουργήθηκε για να επιτρέψει τους ρόλους που θα καθοριστούν, και για τους σκοπούς της δοκιμής που απλά προσπαθούν να εκχωρήσετε αυτή την τιμή, η οποία είναι μια συμβολοσειρά, ιδιοκτησίας κείμενο ενός textblock του. επισυνάπτεται ένα τμήμα κώδικα.

Αυτό είναι ένα από τα στοιχεία που πρέπει να προστεθούν στη συλλογή. η allowedroles ακίνητο περνά το string, αυτό μπορεί να δει μέσω του εντοπισμού σφαλμάτων.

<MenuButton:VerticalButtonCollection x:Key=VerticalButtonsDS d:IsDataSource=True>

<MenuButton:VerticalButton AllowedRoles=test, test2> 
<TextBlock Text={Binding AllowedRoles}></TextBlock>

</MenuButton:VerticalButton>

</MenuButton:VerticalButtonCollection>

Code for the allowed roles property  
Public Shared ReadOnly AllowedRolesProperty As DependencyProperty = DependencyProperty.Register(AllowedRoles, GetType(String), GetType(mButton), New PropertyMetadata(New PropertyChangedCallback(AddressOf onAllowedRolesChanged)))


Public Shared Sub onAllowedRolesChanged(ByVal d As DependencyObject, ByVal args As DependencyPropertyChangedEventArgs) 
     Dim sender As mButton = CType(d, mButton)
     sender.AllowedRoles = CStr(args.NewValue)
End Sub

Τα στοιχεία που εμφανίζονται σε ένα πλαίσιο λίστας, δεν υπάρχουν σφάλματα, αλλά η σύνδεση δεν λειτουργεί. Ι ακόμη και προσπάθησε να κάνει το δεσμευτικός ως πρότυπο στοιχεία της λίστας του. Θα appologize αν αυτό προκαλεί σύγχυση, Ι dont»ξέρει πώς να δημοσιεύσετε κάτι τέτοιο σε εύκολο να καταλάβει κομμάτια.

Ευχαριστώ

Δημοσιεύθηκε 09/12/2008 στις 20:03
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
0

Κατέληξα να πάρει αυτό εργασίας, κάνοντας τα εξής. Ένα από τα κόλπα είναι ότι δεν μπορείτε να χρησιμοποιήσετε ένα μετατροπέα σε ένα πρότυπο δέσμευσης, ώστε να δεσμεύουν το DataContext του αντικειμένου χρησιμοποιώντας ένα δεσμευτικό πρότυπο και στη συνέχεια χρησιμοποιήστε μια τακτική σύνδεση με πρόσβαση σε αυτό.

<UserControl.Resources>
    <mt:AllowedRolesConverter x:Key="RolesConverter"></mt:AllowedRolesConverter>

    <Style x:Key="VerticalButton1Style" TargetType="mt:VerticalButton">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="mt:VerticalButton">
                    <Grid x:Name="RootGrid" DataContext="{TemplateBinding AllowedRoles}" Visibility="{Binding Converter={StaticResource RolesConverter}}">

                        <Border x:Name="border" BorderThickness="1">
                            <Border.BorderBrush>
                                <SolidColorBrush x:Name="borderBrush" Opacity="0" Color="Blue"/>
                            </Border.BorderBrush>
                            <ContentPresenter x:Name="VBContent"
                                              ContentTemplate="{TemplateBinding ContentTemplate}" 
                                              >

                            </ContentPresenter>
                        </Border>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <mt:VerticalButtonCollection x:Key="TestCollection">
        <mt:VerticalButton AllowedRoles="Test1" 
                           Style="{StaticResource VerticalButton1Style}" 
                           Click="VerticalButton_Click"
                           >
            <TextBlock Text="Test Button"></TextBlock>
        </mt:VerticalButton>
        <mt:VerticalButton AllowedRoles="Test1" 
                           Style="{StaticResource VerticalButton1Style}" Click="VerticalButton_Click_1">
            <Ellipse Width="50" Height="50" Fill="Blue"></Ellipse>
        </mt:VerticalButton>
    </mt:VerticalButtonCollection>

    <Style x:Key="ListItemStyle" TargetType="ListBoxItem">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <StackPanel x:Name="Root" Orientation="Horizontal">
                        <ContentPresenter Margin="5,5,5,5"/>
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <Style x:Key="ListStyle" TargetType="ListBox">
        <Setter Property="ItemContainerStyle" Value="{StaticResource ListItemStyle}" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBox">
                    <Grid x:Name="Root">
                        <ItemsPresenter></ItemsPresenter>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
    <ListBox Style="{StaticResource ListStyle}" ItemsSource="{StaticResource TestCollection}" />
</Grid>

    Public Class VerticalButton
    Inherits Button
    Implements INotifyPropertyChanged

    Public Property AllowedRoles() As String
        Get
            Return CStr(GetValue(AllowedRolesProperty))
        End Get
        Set(ByVal value As String)
            SetValue(AllowedRolesProperty, value)
        End Set
    End Property

    Public Shared ReadOnly AllowedRolesProperty As DependencyProperty = DependencyProperty.Register("AllowedRoles", GetType(String), GetType(VerticalButton), New PropertyMetadata(New PropertyChangedCallback(AddressOf OnAllowedRolesChanged)))

    Public Shared Sub OnAllowedRolesChanged(ByVal d As DependencyObject, ByVal args As DependencyPropertyChangedEventArgs)
        Dim sender As VerticalButton = CType(d, VerticalButton)
        sender.AllowedRoles = CStr(args.NewValue)
    End Sub

    Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
End Class

Public Class VerticalButtonCollection
    Inherits ObservableCollection(Of VerticalButton)

End Class
Απαντήθηκε 12/12/2008 στις 16:12
πηγή χρήστη

ψήφοι
0

Αυτό είναι ένα μικρό παράδειγμα του τι προσπαθούμε να κάνουμε. Μπορώ να πάρω το περιεχόμενο της «VerticalButton» και να το εμφανίσετε μια χαρά, αλλά πρέπει να είμαστε σε θέση να πάρει στο «AllowedRoles» ιδιοκτησίας της εξάρτησης στο πρότυπο, επειδή ο τελικός στόχος είναι να δεσμεύσει την προβολή του στοιχείου σε αυτό το ξενοδοχείο (μετά δημιουργώντας ένα IValueConverter). Εμείς απλά δεν φαίνεται να μπορεί να τυλίξει τα κεφάλια μας γύρω από το πώς να φτάσετε στο πρότυπο AllowedRoles από ItemTemplate της λίστας του.

Εδώ είναι το Page.xaml:

<UserControl x:Class="AnnexAMapTool.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mt="clr-namespace:AnnexAMapTool;assembly=AnnexAMapTool"
    Width="400" Height="300">
    <UserControl.Resources>

        <mt:VerticalButtonCollection x:Key="TestCollection">
            <mt:VerticalButton AllowedRoles="Test1, Test2" Content="VBContent"></mt:VerticalButton>
        </mt:VerticalButtonCollection>

        <Style x:Key="ListItemStyle" TargetType="ListBoxItem">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate>
                        <StackPanel x:Name="Root" Orientation="Horizontal">
                            <TextBlock Foreground="Red" Text="{Binding AllowedRoles}"></TextBlock>
                            <Ellipse Width="20" Height="20" Fill="Blue"></Ellipse>
                            <ContentPresenter Content="{TemplateBinding Content}" Margin="5,5,5,5"/>
                        </StackPanel>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <Style x:Key="ListStyle" TargetType="ListBox">
            <Setter Property="ItemContainerStyle" Value="{StaticResource ListItemStyle}" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBox">
                        <Grid x:Name="Root">
                            <ItemsPresenter></ItemsPresenter>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </UserControl.Resources>
    <Grid x:Name="LayoutRoot" Background="White">
        <ListBox Style="{StaticResource ListStyle}" ItemsSource="{StaticResource TestCollection}" />
    </Grid>
</UserControl>

Εδώ είναι ο κώδικας κατηγορίας. Αρκετά βασικά .. προέρχεται από ButtonBase και έχει ένα DP ορίζεται. Επίσης, σημειώστε την τάξη συλλογής στο κάτω μέρος.

Imports System.Windows.Controls.Primitives
Imports System.Collections.ObjectModel

Public Class VerticalButton
    Inherits ButtonBase

    Public Property AllowedRoles() As String
        Get
            Return GetValue(AllowedRolesProperty)
        End Get
        Set(ByVal value As String)
            SetValue(AllowedRolesProperty, value)
        End Set
    End Property

    Public Shared ReadOnly AllowedRolesProperty As DependencyProperty = DependencyProperty.Register("AllowedRoles", GetType(String), GetType(VerticalButton), New PropertyMetadata(New PropertyChangedCallback(AddressOf OnAllowedRolesChanged)))

    Public Shared Sub OnAllowedRolesChanged(ByVal d As DependencyObject, ByVal args As DependencyPropertyChangedEventArgs)
        Dim sender As VerticalButton = CType(d, VerticalButton)
        sender.AllowedRoles = CStr(args.NewValue)
    End Sub

End Class

Public Class VerticalButtonCollection
    Inherits ObservableCollection(Of VerticalButton)

End Class
Απαντήθηκε 10/12/2008 στις 21:56
πηγή χρήστη

ψήφοι
0
<MenuButton:VerticalButton AllowedRoles="test, test2"> 

Η παραπάνω γραμμή είναι που έχει εκχωρηθεί η τιμή allowedroles. Είμαι δημιουργώντας μια νέα παρουσία ενός κουμπιού σε εκείνο το σημείο.

Πού Προσπαθώ να δεσμεύσει τη δυνατότητα ρόλους στο textblock είναι ίσως εντελώς λάθος, αλλά δεν λειτουργεί ακόμη και αν αυτό είναι που κάνει το datatemplate της λίστας του.

<DataTemplate x:Key="VerticalMenuItemTemplate">
            <Canvas>
            <TextBlock Text="{Binding AllowedRoles}">
            </TextBlock>
            <Rectangle Height="500" Width="500" Fill="Blue"></Rectangle></Canvas>
        </DataTemplate>

Στην πραγματικότητα, όπως μπορείτε να δείτε από αυτό το μικρό απόσπασμα, έχω ένα setup ορθ μαζί με τον καμβά. Δεν βλέπω με την Οδηγία, η οποία ήταν μόνο για τους σκοπούς της δοκιμής, έτσι είναι σχεδόν σαν πρότυπο μου αγνοείται. Έχω το πλαίσιο λίστας που έχει συσταθεί διαδρομής ορίζονται ως ακολούθως

<ListBox x:Name="VerticalContainer" Width="81" Height="Auto" HorizontalAlignment="Center" DataContext="{Binding Mode=OneWay, Source={StaticResource VerticalButtonCollectionDS}}" Padding="0,0,0,0" Canvas.Top="-14" ItemTemplate="{StaticResource VerticalMenuItemTemplate}">
Απαντήθηκε 10/12/2008 στις 14:58
πηγή χρήστη

ψήφοι
0

Όταν χρησιμοποιείτε τη σύνταξη Binding έχετε σύνδεση με DataContext του αντικειμένου. Έτσι δεσμευτικές σας:

<MenuButton:VerticalButton AllowedRoles="test, test2"> 
  <TextBlock Text="{Binding AllowedRoles}"></TextBlock>
</MenuButton:VerticalButton>

Είναι σαν να λέει φέρε μου το ακίνητο «AllowedRoles» σε DataContext μου. Δεδομένου ότι το πλαίσιο δεδομένων είναι μάλλον μηδενική (δεν είδα να έχει οριστεί) που δεν παίρνουν οποιαδήποτε τιμή στο πεδίο κειμένου σας.

Αυτό που ίσως θέλετε να κάνετε είναι να καθορίσει ένα πρότυπο για πλήκτρο MENU και στη συνέχεια στο Πρότυπο μπορείτε να πείτε:

<TextBlock Text="{TemplateBinding AllowedRoles}"></TextBlock>

Ποια θα πάρει που όταν εφαρμόζετε το πρότυπο για το στοιχείο.

Εδώ είναι μερικές συνδέσεις που δημοσιεύτηκε σε άλλο νήμα για την κατανόηση των προτύπων και generic.xaml:

  • Προσαρμογή Ελέγχου
  • Skinnable προσαρμοσμένων στοιχείων ελέγχου
  • Μικροαλλαγές Προεπιλογή Στυλ
  • 3 καλές συνδέσεις για generic.xaml

Καλή τύχη!

Απαντήθηκε 09/12/2008 στις 23:46
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more