How to define 'Attached property' as 'SelectedValuePath' in ComboBox?
        Posted  
        
            by SpudCZ
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by SpudCZ
        
        
        
        Published on 2010-06-10T09:43:28Z
        Indexed on 
            2010/06/10
            12:53 UTC
        
        
        Read the original article
        Hit count: 298
        
Hi, I have a problem with binding in ComboBox. I'd like to bind ComboBox items to ListView columns and as a selected value return value of attached property defined on the selected column.
In example bellow you can see working sample that displays width of selected column. If you try to change SelectedValuePath in ComboBox into (loc:SampleBehavior.SampleValue) you get binding error:
BindingExpression path error: '(u:SearchableListView.SearchMemberPath)' property not found on 'object' ''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);
    }
  }
}
Thanks for any help or suggestion.
© Stack Overflow or respective owner