Hello everyone - this is a very general question but I’m stuck and am having trouble with the right approach to use.
I’ve been wrestling with using the output from a WPF UI element (ie. Slider) in a model (RhinoCommand) process. I understand simple events (ie. ValueChanged event) and how to catch the changed value (ie. double value = MySlider.Value) inside the simple, view model event, but I am extremely puzzled as to how to do this correctly when aiming to use the caught value in the underlying model.
I think a more advanced way of handling the event would be to use a control delegate but for the life of me, I have not been able to work out how to use one correctly. There might be other better practices. Below is my best attempt but it fails. As best I can tell the failure happens due to my inability to pass the slider object through to the model via the delegate command.
Any and all help or advice will be GREATLY appreciated.
public class Model: ViewModelBase
{
public DelegateCommand SliderCommand { get; set; }
private double slidervalue;
public double SliderValue { get; set; // with an INotifychanged not shown here }
public Model()
{
this.SliderComand = new DelegateCommand(OnSliderCommand);
}
private void OnSliderCommand(object sender)
{
*// sender always returns null so have not been able to use this to catch slider value*
}
}
// end of Project class
// start of VM
public partial class MainWindow : Window
{
public Model myModel { get; set; }
public MainWindow()
{
InitializeComponent();
mymodel = new Model();
this.DataContext = mymodel;
}
private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<Double> e)
{
var eventBinding = new EventBinding() { EventName = "ValueChanged" };
BindingOperations.SetBinding(eventBinding, EventBinding.CommandProperty, new Binding("DataContext.SliderCommand") { RelativeSource = new RelativeSource() { AncestorType = typeof(Slider) } });
BindingOperations.SetBinding(eventBinding, EventBinding.CommandParameterProperty, new Binding());
}
// end of MainWindow partial class
slider XAML
\<Slider x:Name="MySlider" Minimum="0" Maximum="10" ValueChanged="Slider_ValueChanged"/>