2010-06-10 3 views
0

Bonjour, j'ai un problème avec la liaison dans ComboBox. Je voudrais lier des éléments ComboBox aux colonnes ListView et en tant que valeur de retour sélectionnée de la propriété attachée définie dans la colonne sélectionnée.Comment définir 'Propriété jointe' comme 'SelectedValuePath' dans ComboBox?

Dans l'exemple ci-dessous, vous pouvez voir un exemple de travail qui affiche la largeur de la colonne sélectionnée. Si vous essayez de modifier SelectedValuePath dans ComboBox dans (loc: SampleBehavior.SampleValue) vous obtenez une erreur de liaison:

erreur de chemin de BindingExpression: '(u: SearchableListView.SearchMemberPath)' propriété introuvable sur 'objet' '' GridViewColumn »

 
<Window x:Class="Problem_Sample1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:loc="clr-namespace:Problem_Sample1" 
    WindowStartupLocation="CenterScreen" 
    Title="Window1" 
    Height="300" Width="300"> 
    <DockPanel> 
    <ComboBox DockPanel.Dock="Top" 
     x:Name="combobox" 
     ItemsSource="{Binding Path=View.Columns, ElementName=listview}" 
     DisplayMemberPath="Header" 
     SelectedValuePath="Width"> 
    </ComboBox> 

    <StatusBar DockPanel.Dock="Bottom"> 
     <TextBlock> 
     <TextBlock Text="Selected column (value): " /> 
     <TextBlock Text="{Binding Path=SelectedValue, ElementName=combobox}" /> 
     </TextBlock> 
    </StatusBar> 

    <ListView x:Name="listview"> 
     <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Name" 
        Width="101" 
        loc:SampleBehavior.SampleValue="201" /> 
      <GridViewColumn Header="Surname" 
        Width="102" 
        loc:SampleBehavior.SampleValue="202" /> 
     </GridView> 
     </ListView.View> 
    </ListView> 
    </DockPanel> 
</Window> 

 

SampleBehavior.cs

 
using System.Windows; 
using System.Windows.Controls; 

namespace Problem_Sample1 
{ 
    public static class SampleBehavior 
    { 

    public static readonly DependencyProperty SampleValueProperty = 
     DependencyProperty.RegisterAttached(
     "SampleValue", 
     typeof (int), 
     typeof (SampleBehavior)); 

    [AttachedPropertyBrowsableForType(typeof(GridViewColumn))] 
    public static int GetSampleValue(GridViewColumn column) 
    { 
     return (int)column.GetValue(SampleValueProperty); 
    } 

    [AttachedPropertyBrowsableForType(typeof(GridViewColumn))] 
    public static void SetSampleValue(GridViewColumn column, int value) 
    { 
     column.SetValue(SampleValueProperty, value); 
    } 

    } 
} 

 

Merci pour toute aide ou suggestion.

Répondre

0

Depuis que je suis tombé sur cela (et c'est le premier résultat google pour une recherche raisonnable), je pourrais aussi bien écrire une réponse maintenant.

La fonctionnalité demandée est réellement disponible exactement comme elle a été demandée.

<ComboBox DockPanel.Dock="Top" 
    x:Name="combobox" 
    ItemsSource="{Binding Path=View.Columns, ElementName=listview}" 
    DisplayMemberPath="Header" 
    SelectedValuePath="(loc:SampleBehavior.SampleValue)"> 

Il est important de mettre le chemin de propriété attaché à (accolades), sinon il va essayer une recherche bizarre sur l'objet source.

En outre, le message d'erreur dans la question des états « erreur de chemin de BindingExpression: « (u: SearchableListView.SearchMemberPath) » propriété introuvable sur « objet » « » GridViewColumn » », de sorte que le message d'erreur est certainement lié à une propriété complètement différente et non à "(loc: SampleBehavior.SampleValue)". Cette incohérence semble être un problème lié à l'édition qui a été faite afin de réduire l'échantillon de code

Questions connexes