我有一個畫布,例如類似於this solution或使用ItemsControl
的許多其他人。將MVF canvas保存爲MVVM模式後的圖像
現在我想要一個應該綁定到ICommand的按鈕。這個命令應該調用可以保存圖像的ViewModel類的一個方法。 保存方法很清楚,但如何在MVVM模式之後執行綁定?
我有一個畫布,例如類似於this solution或使用ItemsControl
的許多其他人。將MVF canvas保存爲MVVM模式後的圖像
現在我想要一個應該綁定到ICommand的按鈕。這個命令應該調用可以保存圖像的ViewModel類的一個方法。 保存方法很清楚,但如何在MVVM模式之後執行綁定?
你可以使用CommandParameter畫布傳遞給視圖模型的保存方法
<Button Content="Save"
Command="{Binding SaveCanvasCommand}"
CommandParameter="{Binding ElenementName=myCanvas}" ?>
<Canvas x:Name="myCanvas">
<!-- Stuff to save -->
</Canvas>
而且在某處你的ViewModel或命令你必須
void SaveCanvasCommandExecute(object parameter)
{
UIElement toSave = (UIElement)parameter;
//.. You'd probably use RenderTargetBitmap here to save toSave.
}
如果你不想引用UI元素在您的視圖模型,你可以使用附加的行爲:
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.....
}
}
}
然後在您的視圖模型你有你的命令,設置屬性,還對您的視圖模型:
public ICommand SaveCanvasCommand
{
get
{
if (_saveCanvasCommand == null)
_saveCanvasCommand = new RelayCommand(() => { IsSaveCanvas = true; });
return _saveCanvasCommand;
}
}
而這勢必會你查看屬性:
public bool IsSaveCanvas
{
get { return _isSaveCanvas; }
set
{
_isSaveCanvas = value;
RaisePropertyChanged("IsSaveCanvas");
}
}
釷恩掛鉤這一切在XAML看起來是這樣的:
添加Trigger
上你的ViewModel屬性的值綁定到你的附加行爲的Control
:
<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>
,然後綁定你的Button
/MenuItem
到在保存的ViewModels命令:
<Canvas.ContextMenu>
<MenuItem Header="Save" Command="{Binding SaveCanvasCommand}"/>
</Canvas.ContextMenu>
您是否在尋找如何使用MVVM綁定? (MVVM燈RelayCommand) – whoisthis