我正在使用Microsoft Expression Blend 4
我有一个浏览器..,
[XAML] ConnectionView"后面的空代码"
<WebBrowser local:AttachedProperties.BrowserSource="{Binding Source}">
<i:Interaction.Triggers>
<i:EventTrigger>
<i:InvokeCommandAction Command="{Binding LoadedEvent}"/>
</i:EventTrigger>
<i:EventTrigger EventName="Navigated">
<i:InvokeCommandAction Command="{Binding NavigatedEvent}" CommandParameter="??????"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</WebBrowser>
Run Code Online (Sandbox Code Playgroud)
[C#] AttachedProperties类
public static class AttachedProperties
{
public static readonly DependencyProperty BrowserSourceProperty = DependencyProperty . RegisterAttached ( "BrowserSource" , typeof ( string ) , typeof ( AttachedProperties ) , new UIPropertyMetadata ( null , BrowserSourcePropertyChanged ) );
public static string GetBrowserSource ( DependencyObject _DependencyObject )
{
return ( string ) _DependencyObject . GetValue ( BrowserSourceProperty …Run Code Online (Sandbox Code Playgroud) 我最近在WPF中编程很多,但我的View和ViewModel在这一点上并不是分开的.嗯,这是部分原因.我的所有绑定都与文本框中的文本,标签内容,数据网格中的列表,......相关,都是由常规属性完成的,其中包含NotifyPropertyChanged事件.
处理按钮点击或文本更改内容的所有事件都是通过链接事件来完成的.现在,我想开始使用命令并找到这篇文章:http://www.codeproject.com/Articles/126249/MVVM-Pattern-in-WPF-A-Simple-Tutorial-for-Absolute.它解释了如何设置MVVM,但我对它感到困惑RelayCommand.
它做了什么工作?它对我表单中的所有命令都可用吗?如果(a)某些文本框未填写,如何禁用该按钮?
编辑1:
对"我的表单中的所有命令都可用吗?"的一个很好的解释.在这里回答:https://stackoverflow.com/a/22286816/3357699
这是我到目前为止的代码:https://stackoverflow.com/a/22289358/3357699
我在使用棱镜的SL3应用程序中有一个多选列表框,我需要在我的viewmodel中包含列表框中当前所选项目的集合.
viewmodel对视图一无所知,因此它无权访问列表框控件.此外,我需要能够从viewmodel清除列表框中的选定项目.
不知道如何解决这个问题
谢谢迈克尔
假设我在资源Dictionary中有一个作为DataTempate实现的视图.我有一个相应的ViewModel.绑定命令很简单.但是如果我的View包含一个像ListBox这样的控件,我需要根据列表中更改的项目发布应用程序范围的事件(使用Prism的事件聚合器).
如果ListBox支持一个命令,我可以将它绑定到ViewModel中的命令并发布该事件.但是Listbox不允许这样的选择.我该如何桥接这个?
编辑:很多很棒的答案.
看一下这个链接 http://blogs.microsoft.co.il/blogs/tomershamam/archive/2009/04/14/wpf-commands-everywhere.aspx
谢谢
阿里尔
我在我的C#WPF应用程序中有一个ToggleButton,我想将一个Command绑定到Checked事件,将一个Command绑定到Unchecked事件.
我目前的情况如下:
<ToggleButton Name="btnOpenPort" Style="{StaticResource myOnOffBtnStyle}" Content="Open Port"
Checked="btnOpenPort_Checked" Unchecked="btnOpenPort_Unchecked"
IsChecked="{Binding Path=PortViewModel.PortIsOpen, Mode=OneWay}"
Canvas.Left="75" Canvas.Top="80" Height="25" Width="100"/>
Run Code Online (Sandbox Code Playgroud)
但这不是我的目标.因为在这种情况下,我必须在Checked和Unchecked事件的代码后面设置属性.相反,我想在Checked或Unchecked事件被触发后在我的ViewModel中调用一个Command(ICommand),这样我的切换按钮后面不需要任何代码.
有没有办法直接为XAML中的这两个事件绑定命令?类似于WPF中"标准"按钮控件的命令属性?
编辑 这是关于@ har07提示的工作原理:
1:如果您还没有参考,请添加参考:
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions"
Run Code Online (Sandbox Code Playgroud)
2:已检查和未检查事件的已实现Interaction.Triggers:
<ToggleButton
Name="btnOpenPort" Style="{StaticResource myOnOffBtnStyle}" Content="Open Port"
IsChecked="{Binding Path=PortViewModel.PortIsOpen, Mode=OneWay}"
Canvas.Left="75" Canvas.Top="80" Height="25" Width="100">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<i:InvokeCommandAction Command="{Binding Path=PortViewModel.OpenPort}"/>
</i:EventTrigger>
<i:EventTrigger EventName="Unchecked">
<i:InvokeCommandAction Command="{Binding Path=PortViewModel.ClosePort}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ToggleButton>
Run Code Online (Sandbox Code Playgroud)
有了这个解决方案,我不必在我的ViewModel或后面的代码中更改一行代码.我可以调用我的ICommand,就像我在MVVM模式下使用标准按钮一样.
在 Xamarin.Forms 中,如何将按钮指定为页面的默认按钮?
例如,在 UWP 上,当用户在页面具有焦点时按下 Enter 键时,应触发DefaultButton的单击处理程序。
我有一个简单的WPF示例尝试将ListBox的Selected事件绑定到视图模型中的ICommand.
XAML
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid>
<ListBox ItemsSource="{Binding Items}"
Selected="{Binding DoSomething}"/>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
查看模型
namespace WpfApp1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new ViewModel();
}
}
public class ViewModel : INotifyPropertyChanged
{
public ViewModel()
{
Items = new List<string>();
Items.Add("A");
Items.Add("B");
Items.Add("C");
DoSomething = new MyCommand();
}
public List<string> Items { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
public …Run Code Online (Sandbox Code Playgroud) wpf ×5
mvvm ×3
c# ×2
command ×2
xaml ×2
.net ×1
binding ×1
browser ×1
data-binding ×1
eventargs ×1
events ×1
prism ×1
relaycommand ×1
togglebutton ×1