Quantcast
Channel: wpftoolkit Discussions Rss Feed
Viewing all articles
Browse latest Browse all 2157

New Post: How to use SelectedItems override

$
0
0
Hi,

Can you use an ObservableCollection instead of a List ? Or a DP to see the list change in a callback ?
I've made a sample inspire from yours. I use a DP to be notified when the Collection is modified and an event to be notified when the content of the collection is changed.

Hope this helps :
<xctk:CheckComboBox x:Name="_checkComboBox"
                          ItemsSource="{Binding DataItem.DependentBatches, Mode=TwoWay}"
                          DisplayMemberPath="BatchName"
                          ValueMemberPath="IndexOrchestratedBatchId"
                          SelectedItemsOverride="{Binding DataItem.SelectedDependentBatches}" />

  public partial class MainWindow : Window
  {
    public MainWindow()
    {
      InitializeComponent();

      _checkComboBox.DataContext = this;

      this.DataItem = new MyDataItem();
      this.DataItem.DependentBatches = new ObservableCollection<MySubDataItem>()
      {
        new MySubDataItem() { BatchName = "First", IndexOrchestratedBatchId = 1 },
        new MySubDataItem() { BatchName = "Second", IndexOrchestratedBatchId = 2 },
        new MySubDataItem() { BatchName = "Third", IndexOrchestratedBatchId = 3 },
        new MySubDataItem() { BatchName = "Fourth", IndexOrchestratedBatchId = 4 },
        new MySubDataItem() { BatchName = "Fifth", IndexOrchestratedBatchId = 5 },
      };

      this.DataItem.SelectedDependentBatches = new ObservableCollection<MySubDataItem>()
      {
        this.DataItem.DependentBatches[2] //initial selected item
      };

      this.DataItem.SelectedDependentBatches.CollectionChanged += this.SelectedDependentBatches_CollectionChanged;

    }

    private void SelectedDependentBatches_CollectionChanged( object sender, NotifyCollectionChangedEventArgs e )
    {
      System.Diagnostics.Debug.WriteLine("Items in collection changed");
    }

    public MyDataItem DataItem
    {
      get;
      set;
    }
  }

  public class MyDataItem : DependencyObject
  {
    public ObservableCollection<MySubDataItem> DependentBatches
    {
      get;
      set;
    }

    #region SelectedDependentBatches

    public static readonly DependencyProperty SelectedDependentBatchesProperty = 
      DependencyProperty.Register( "SelectedDependentBatches", typeof( ObservableCollection<MySubDataItem> ), typeof( MyDataItem )
                                   , new FrameworkPropertyMetadata( null, MyDataItem.OnSelectedDependentBatchesChanged ) );

    public ObservableCollection<MySubDataItem> SelectedDependentBatches
    {
      get
      {
        return ( ObservableCollection<MySubDataItem> )this.GetValue( MyDataItem.SelectedDependentBatchesProperty );
      }
      set
      {
        this.SetValue( MyDataItem.SelectedDependentBatchesProperty, value );
      }
    }

    private static void OnSelectedDependentBatchesChanged( DependencyObject d, DependencyPropertyChangedEventArgs e )
    {
      ( ( MyDataItem )d ).OnSelectedDependentBatchesChanged( e );
    }

    protected virtual void OnSelectedDependentBatchesChanged( DependencyPropertyChangedEventArgs e )
    {
      System.Diagnostics.Debug.WriteLine( "Collection changed" );
    }

    #endregion
  }

  public class MySubDataItem
  {
    public string BatchName
    {
      get;
      set;
    }

    public int IndexOrchestratedBatchId
    {
      get;
      set;
    }
  }

Viewing all articles
Browse latest Browse all 2157

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>