Nếu bạn không muốn tham khảo các yếu tố giao diện người dùng trong ViewModel của bạn, bạn có thể sử dụng một hành vi kèm theo:
internal static class Behaviours
{
public static readonly DependencyProperty SaveCanvasProperty =
DependencyProperty.RegisterAttached("SaveCanvas", typeof(bool), typeof(Behaviours),
new UIPropertyMetadata(false, OnSaveCanvas));
public static void SetSaveCanvas(DependencyObject obj, bool value)
{
obj.SetValue(SaveCanvasProperty, value);
}
public static bool GetSaveCanvas(DependencyObject obj)
{
return (bool)obj.GetValue(SaveCanvasProperty);
}
private static void OnSaveCanvas(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
if ((bool)e.NewValue)
{
// Save code.....
}
}
}
Sau đó, trong bạn ViewModel bạn có lệnh của bạn mà đặt ra một bất động sản, cũng trên ViewModel của bạn:
public ICommand SaveCanvasCommand
{
get
{
if (_saveCanvasCommand == null)
_saveCanvasCommand = new RelayCommand(() => { IsSaveCanvas = true; });
return _saveCanvasCommand;
}
}
Và tài sản đó là ràng buộc để Xem bạn:
public bool IsSaveCanvas
{
get { return _isSaveCanvas; }
set
{
_isSaveCanvas = value;
RaisePropertyChanged("IsSaveCanvas");
}
}
Th en hooking nó tất cả lên trong XAML trông như thế này:
Thêm một Trigger
trên Control
gắn kết giá trị của tài sản ViewModel của bạn để hành vi kèm của bạn:
<UserControl.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding IsSaveCanvas}" Value="True">
<Setter Property="wpfApplication1:Behaviours.SaveCanvas" Value="True"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsSaveCanvas}" Value="False">
<Setter Property="wpfApplication1:Behaviours.SaveCanvas" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</UserControl.Style>
Và sau đó ràng buộc bạn Button
/MenuItem
để các ViewModels Lưu Command:
<Canvas.ContextMenu>
<MenuItem Header="Save" Command="{Binding SaveCanvasCommand}"/>
</Canvas.ContextMenu>
Nguồn
2013-07-17 07:53:34
Bạn đang tìm kiếm cách để ràng buộc sử dụng MVVM? (MVVM ánh sáng RelayCommand) – whoisthis