/// <summary>
/// 1.0.1
/// </summary>
/// <typeparam name="T"></typeparam>
public class DataSelectorByLookupWindowBase<T> : ChildWindow
{
public static Action<T[]> Selected { get; set; }
public DataSelectorByLookupWindowBase()
{
this.Loaded += new RoutedEventHandler(DataSelectorByLookupWindowBase_Loaded);
}
void DataSelectorByLookupWindowBase_Loaded(object sender, RoutedEventArgs e)
{
var viewModel = DataContext as DataSelectorByLookupWindowViewModel<T>;
viewModel.Selected += (result) =>
{
if (Selected != null)
{
Selected(result);
}
this.Close();
};
viewModel.Cancel += () =>
{
this.Close();
};
}
}
using System;
using System.Collections.ObjectModel;
using System.Linq;
/// <summary>
/// 1.0.5
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class DataSelectorByLookupWindowViewModel<T> : ServerPagerViewModel
{
#region Properties
private ObservableCollection<object> itemsSource;
public ObservableCollection<object> ItemsSource
{
get
{
return itemsSource;
}
set
{
itemsSource = value;
base.RaisePropertyChanged(this, "ItemsSource");
}
}
private object selectedItem;
public object SelectedItem
{
get
{
return selectedItem;
}
set
{
selectedItem = value;
base.RaisePropertyChanged(this, "SelectedItem");
}
}
private ObservableCollection<object> selectedItems;
public ObservableCollection<object> SelectedItems
{
get
{
return selectedItems;
}
set
{
selectedItems = value;
base.RaisePropertyChanged(this, "SelectedItems");
}
}
public Action<T[]> Selected { get; set; }
public Action Cancel { get; set; }
private bool searchButtonIsEnabled;
public bool SearchButtonIsEnabled
{
get
{
return searchButtonIsEnabled;
}
set
{
searchButtonIsEnabled = value;
base.RaisePropertyChanged(this, "SearchButtonIsEnabled");
}
}
private bool okButtonIsEnabled;
public bool OkButtonIsEnabled
{
get
{
return okButtonIsEnabled;
}
set
{
okButtonIsEnabled = value;
base.RaisePropertyChanged(this, "OkButtonIsEnabled");
}
}
#endregion
public DataSelectorByLookupWindowViewModel()
{
this.SelectedItems = new ObservableCollection<object>();
this.SelectedItems.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(SelectedItems_CollectionChanged);
this.ItemsSource = new ObservableCollection<object>();
}
void SelectedItems_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
OkButtonIsEnabled = this.SelectedItems.Count > 0;
}
#region for parent
protected override void OnPageIndexChanged()
{
Search();
}
#endregion
#region for children
protected abstract void OnSearch(Action<int> callback);
/// <summary>
/// Called when [selected after confirm].
/// </summary>
/// <param name="items">The items.</param>
protected virtual void OnSelectedAfterConfirm(object[] items)
{
if (Selected != null)
{
if (items != null)
{
if (items.Count() > 0)
{
Selected(items.Cast<T>().ToArray());
}
else
{
Selected(new T[] { (T)this.SelectedItem });
}
}
}
}
/// <summary>
/// Called when [cancel].
/// </summary>
protected virtual void OnCancel()
{
if (Cancel != null)
{
Cancel();
}
}
#endregion
#region for user
/// <summary>
/// Searches this instance.
/// </summary>
public void Search()
{
OnSearch((totalCount) =>
{
OnPagerBind(totalCount);
this.SelectedItems.Clear();
});
}
protected void SetItemsSource(object[] items)
{
ItemsSource.Clear();
foreach (var item in items)
{
ItemsSource.Add(item);
}
}
#endregion
#region Commands
/// <summary>
/// Gets the search command.
/// </summary>
public DelegateCommand SearchCommand
{
get
{
return new DelegateCommand((parameter) =>
{
Search();
});
}
}
/// <summary>
/// Gets the ok command.
/// </summary>
public DelegateCommand OkCommand
{
get
{
return new DelegateCommand((parameter) =>
{
OnSelectedAfterConfirm(this.SelectedItems.ToArray());
});
}
}
/// <summary>
/// Gets the cancel command.
/// </summary>
public DelegateCommand CancelCommand
{
get
{
return new DelegateCommand((parameter) =>
{
OnCancel();
});
}
}
#endregion
}