- View (XAML):
<Element Command={markup:Command Execute} />
<Element Command={markup:Command ExecuteWithArgumentAsync, CanExecute}
CommandParameter={Binding Argument} />- View Model (*.cs):
class ViewModel
{
public void Execute() {}
public void ExecuteWithArgument(string arg) {}
// The `Execute` method supports async, and its default `Can Execute` method will disable the command when it is busy.
public Task ExecuteAsync() => Task.Completed;
public Task ExecuteWithArgumentAsync(string arg) => Task.Completed;
// The `Can Execute` method does not support async.
public bool CanExecute() => true;
public bool CanExecuteWithArgument(string arg) => true;
}Combine multiple Converters into one pipeline.
<TextBlock Visibility="{Binding DescriptionText, Converter={markup:Compose
{StaticResource IsNullOrEmptyOperator},
{StaticResource NotConverter},
{StaticResource BooleanToVisibilityConverter}}}"
Text="{Binding DescriptionText}" />Using the Conditional expression in XAML.
<Button Command="{markup:If {Binding BoolProperty},
{Binding OkCommand},
{Binding CancelCommand}}" /><UserControl>
<markup:If Condition="{Binding IsLoading}">
<markup:If.True>
<views:LoadingView />
</markup:If.True>
<markup:If.False>
<views:LoadedView />
</markup:If.False>
</markup:If>
</UserControl>Using the Switch expression in XAML.
<Image Source="{markup:Switch {Binding FileType},
{Case {x:Static res:FileType.Music}, {StaticResource MusicIcon}},
{Case {x:Static res:FileType.Video}, {StaticResource VideoIcon}},
{Case {x:Static res:FileType.Picture}, {StaticResource PictureIcon}},
...
{Case {StaticResource UnknownFileIcon}}}" /><UserControl>
<Switch To="{Binding SelectedViewName}">
<Case Label="View1">
<views:View1 />
</Case>
<Case Label="{x:Static res:Views.View2}">
<views:View2 />
</Case>
<Case>
<views:View404 />
</Case>
</Switch>
</UserControl>Dynamically switch the culture resource without restarting the app.
<TextBlock Text="{markup:I18n {x:Static languages:UiStrings.MainWindow_Title}}" />
<TextBlock Text="{markup:I18nString {x:Static languages:UiStrings.SayHello}, {Binding Username}}" />
<TextBlock Text="{markup:I18nString {x:Static languages:UiStrings.StringFormat},
{Binding Arg0},
{Binding Arg1},
...,
{Binding Arg15}}" /><Button Style="{markup:Styles {StaticResource FlatButtonStyle},
{StaticResource AnimationStyle},
...}" />