Я полагаю, что вы хотите, чтобы иметь возможность вызывать BeginEdit в сетке из вашей ViewModel?Есть несколько способов сделать это:
1) Вы можете использовать Messaging, как тот, что в рамках MVVM-Light.В своем коде вы подписались бы на событие BeginEdit, а в своей ViewModel вы бы опубликовали событие BeginEdit.
2) Вы можете создать поведение, здесь - аналогичный пример, гдеузел в TreeView раскрывается с помощью поведения.
Таким образом, в примере вы можете установить переменную IsBeginEdit, и поведение будет запускаться, вызывая BeginEdit для GridView. source MiscView / MiscViewModel
Поведение:
В приведенном мной примере исходного кода я использую Caliburn Micro и называю элемент кнопки x: Name = "BeginEdit"CM автоматически связывает это с моим методом BeginEdit.Если вы используете Mvvm-Light, вы можете использовать EventToCommand.
<Button Content="BeginEdit">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cmd:EventToCommand Command="{Binding BeginEdit, Mode=OneWay}"
PassEventArgsToCommand="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
[Description("BeginEdit")]
public class BeginEditBehavior : TargetedTriggerAction<RadGridView>
{
private RadGridView _radGridView;
protected override void OnAttached()
{
base.OnAttached();
_radGridView = (RadGridView) (AssociatedObject);
}
protected override void Invoke(object parameter)
{
_radGridView.BeginEdit();
}
}
View:
<telerik:RadGridView ItemsSource="{Binding MyItems, Mode=TwoWay}">
<i:Interaction.Triggers>
<ei:PropertyChangedTrigger Binding="{Binding IsBeginEdit, Mode=TwoWay}">
<i:Interaction.Behaviors>
<ei:ConditionBehavior>
<ei:ConditionalExpression>
<ei:ComparisonCondition LeftOperand="{Binding IsBeginEdit}"
RightOperand="True" />
</ei:ConditionalExpression>
</ei:ConditionBehavior>
</i:Interaction.Behaviors>
<framework:BeginEditBehavior />
</ei:PropertyChangedTrigger>
</i:Interaction.Triggers>
</telerik:RadGridView>
ViewModel:
private bool _isBeginEdit;
public bool IsBeginEdit
{
get { return _isBeginEdit; }
set
{
_isBeginEdit = value;
NotifyOfPropertyChange(() => IsBeginEdit);
}
}
public void BeginEdit()
{
IsBeginEdit = true;
}
3) И, возможно, не лучшим способом, вы могли бы сохранить ссылку на ваш Viewв вашей ViewModel.Caliburn Micro, например, дает вам способ получить доступ к вашему View GetView () из вашей ViewModel, затем вы можете получить ссылку на вашу сетку и вызвать BeginEdit ().
Мне нравится вариант 2, но 1работает так же хорошо.