Browse Source

CheckComboBox: updated selected items based off of SelectedValue

pull/1645/head
brianlagunas_cp 15 years ago
parent
commit
1cd44b2114
  1. 5
      ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/CheckComboBox/Implementation/CheckComboBox.cs
  2. 84
      ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Core/Primitives/Selector.cs

5
ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/CheckComboBox/Implementation/CheckComboBox.cs

@ -103,12 +103,17 @@ namespace Microsoft.Windows.Controls
private void UpdateText(string text) private void UpdateText(string text)
{ {
if (String.IsNullOrEmpty(Text))
Text = string.Empty;
if (!Text.Equals(text)) if (!Text.Equals(text))
Text = text; Text = text;
} }
private void UpdateTextFromSelectedValue() private void UpdateTextFromSelectedValue()
{ {
UpdateText(String.Empty);
if (!String.IsNullOrEmpty(SelectedValue)) if (!String.IsNullOrEmpty(SelectedValue))
{ {
string[] values = SelectedValue.Split(new string[] { Delimiter }, StringSplitOptions.RemoveEmptyEntries); string[] values = SelectedValue.Split(new string[] { Delimiter }, StringSplitOptions.RemoveEmptyEntries);

84
ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Core/Primitives/Selector.cs

@ -13,6 +13,7 @@ namespace Microsoft.Windows.Controls.Primitives
{ {
#region Members #region Members
private bool _ignoreSetSelectedValue;
private bool _surpressSelectionChanged; private bool _surpressSelectionChanged;
private bool _surpressSelectedValueChanged; private bool _surpressSelectedValueChanged;
@ -117,11 +118,12 @@ namespace Microsoft.Windows.Controls.Primitives
protected virtual void OnSelectedValueChanged(string oldValue, string newValue) protected virtual void OnSelectedValueChanged(string oldValue, string newValue)
{ {
//if (_surpressSelectedValueChanged) if (_surpressSelectedValueChanged)
// return; return;
//if (ItemContainerGenerator.Status == System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated) //if we are controling the selections from the SelectedValue we can only update the IsSelected property of the items if the containers have been generated
// UpdateSelectedItemsFromSelectedValue(); if (ItemContainerGenerator.Status == System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated)
UpdateSelectedItemsFromSelectedValue();
} }
#endregion //SelectedValue #endregion //SelectedValue
@ -140,9 +142,6 @@ namespace Microsoft.Windows.Controls.Primitives
public override void OnApplyTemplate() public override void OnApplyTemplate()
{ {
base.OnApplyTemplate(); base.OnApplyTemplate();
//if item containers are generated
//UpdateSelectedItemsFromDelimiterValue();
} }
protected override bool IsItemItsOwnContainerOverride(object item) protected override bool IsItemItsOwnContainerOverride(object item)
@ -255,10 +254,10 @@ namespace Microsoft.Windows.Controls.Primitives
{ {
var item = GetDataContextItem(source); var item = GetDataContextItem(source);
Update(item, remove); Update(item, remove);
RaiseSelectionItemChangedEvent(item, !remove); //inverse the remove paramter to correctly reflect the IsSelected state RaiseSelectedItemChangedEvent(item, !remove); //inverse the remove paramter to correctly reflect the IsSelected state
} }
protected virtual void RaiseSelectionItemChangedEvent(object item, bool isSelected) protected virtual void RaiseSelectedItemChangedEvent(object item, bool isSelected)
{ {
if (_surpressSelectionChanged) if (_surpressSelectionChanged)
return; return;
@ -323,6 +322,10 @@ namespace Microsoft.Windows.Controls.Primitives
private void UpdateSelectedValue(string value) private void UpdateSelectedValue(string value)
{ {
//get out of here if we don't want to set the SelectedValue
if (_ignoreSetSelectedValue)
return;
_surpressSelectedValueChanged = true; _surpressSelectedValueChanged = true;
if (!SelectedValue.Equals(value)) if (!SelectedValue.Equals(value))
@ -331,27 +334,48 @@ namespace Microsoft.Windows.Controls.Primitives
_surpressSelectedValueChanged = false; _surpressSelectedValueChanged = false;
} }
//private void UpdateSelectedItemsFromSelectedValue() private void UpdateSelectedItemsFromSelectedValue()
//{ {
// //if we have a SelectedMemberPath we will rely on Databinding to select items _surpressSelectionChanged = true;
// if (!String.IsNullOrEmpty(SelectedMemberPath))
// return; if (!String.IsNullOrEmpty(SelectedValue))
{
// if (!String.IsNullOrEmpty(SelectedValue)) //first we have to unselect everything
// { UnselectAll();
// string[] values = SelectedValue.Split(new string[] { Delimiter }, StringSplitOptions.RemoveEmptyEntries);
// foreach (string value in values)
// { string[] values = SelectedValue.Split(new string[] { Delimiter }, StringSplitOptions.RemoveEmptyEntries);
// var item = ResolveItemByValue(value); foreach (string value in values)
// var selectorItem = ItemContainerGenerator.ContainerFromItem(item) as SelectorItem; {
// if (selectorItem != null) var item = ResolveItemByValue(value);
// { var selectorItem = ItemContainerGenerator.ContainerFromItem(item) as SelectorItem;
// if (!selectorItem.IsSelected) if (selectorItem != null)
// selectorItem.IsSelected = true; {
// } if (!selectorItem.IsSelected)
// } selectorItem.IsSelected = true;
// } }
//} }
}
_surpressSelectionChanged = true;
}
private void UnselectAll()
{
_ignoreSetSelectedValue = true;
foreach (object item in ItemsSource)
{
var selectorItem = ItemContainerGenerator.ContainerFromItem(item) as SelectorItem;
if (selectorItem != null)
{
if (selectorItem.IsSelected)
selectorItem.IsSelected = false;
}
}
_ignoreSetSelectedValue = false;
}
protected object ResolveItemByValue(string value) protected object ResolveItemByValue(string value)
{ {

Loading…
Cancel
Save