我最近在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
可能重复:
使用WPF绑定传递两个命令参数
我有以下层次结构:
abstract class TicketBase
{
public DateTime PublishedDate { get; set; }
}
class TicketTypeA:TicketBase
{
public string PropertyA { get; set; }
}
class TicketTypeB:TicketBase
{
public string PropertyB { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的VM中,我有一个List<TicketBase> Tickets.当用户单击我的应用程序上的按钮时,他们希望查看某个属性的先前值列表,例如:
<Button Tag="{x:Type Types:TicketTypeA}"
Command="{Binding ListHistoryCommand}"
CommandParameter="{Binding Tag, RelativeSource={RelativeSource Self}}" />
Run Code Online (Sandbox Code Playgroud)
如您所见,我将我的Tag属性设置为TicketTypeA并将其作为参数传递给我的命令:
private void ListHistory(object o)
{
if (Tickets.Count == 0)
return;
Type ty = o as Type;
ValueHistory = new ObservableCollection<TicketBase>(GetTicketsOfType(ty).Select(t => t)); // <- …Run Code Online (Sandbox Code Playgroud) 可能重复:
使用WPF绑定传递两个命令参数
我需要将两个参数发送到我的RelayCommand,如:
public RelayCommand<String,Int> MyCommand {get;set;} Or
public RelayCommand<EventArgument,String> MyCommand {get;set;}
Run Code Online (Sandbox Code Playgroud) 目前我的代码如下所示:
<Button Command="{Binding DrinkCommand}" CommandParameter="Capuccino" Style="{StaticResource DrinkButton}">
<TextBlock>Capuccino</TextBlock>
</Button>
<Button Command="{Binding DrinkWithSugarCommand}" CommandParameter="Capuccino" Style="{StaticResource DrinkButton}">
<TextBlock>Capuccino + sugar</TextBlock>
</Button>
Run Code Online (Sandbox Code Playgroud)
你可以看到我RelayCommand对加糖和不加糖的卡布奇诺有不同的选择。
我想添加添加额外牛奶的选项。但是我会得到:
DrinkCommand,
DrinkWithSugarCommand,
DrinkWithMilkCommand,
DrinkWithSugarAndMilkCommand。
有没有办法让他们知道DrinkCommand我想要加糖和/或牛奶的饮料(卡布奇诺)?
wpf ×4
c# ×2
binding ×1
command ×1
mvvm ×1
mvvm-light ×1
parameters ×1
relaycommand ×1
xaml ×1