我在弄清楚如何将我的方法正确绑定到viewmodel时遇到了一些麻烦。
这是我目前的XAML:
<TextBox x:Name="Length" Style="{StaticResource LengthStyle}" Height="Auto" Width="35"
TextChanged="{Binding Validate}" Text="{Binding Length, ValidatesOnDataErrors=True, UpdateSourceTrigger=LostFocus}" />
然后在我的viewmodel中,我有一个看起来像这样的方法:
public string Validate(Column c){
//unimportant
}
我只是对如何让它发挥作用感到困惑。我应该有一个调用它的setter属性吗?我会把它设置为代码背后的事件,但我正在研究的项目禁止这样做。感谢。
答案 0 :(得分:0)
创建如下所示的属性
private string length;
public string Length
{
get
{
return length;
}
set
{
length = value;
//do whatever you want
}
}
答案 1 :(得分:0)
包括这两个互动参考: 1. System.Windows.Interactivity 2. Microsoft.Expression.Interactions
然后在你的xaml声明:
xmlns:interactivity="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:interactions="clr-namespace:Microsoft.Expression.Interactivity.Input;assembly=Microsoft.Expression.Interactions"
文本框的xaml将如下:
<TextBox>
<interactivity:Interaction.Triggers>
<interactivity:EventTrigger EventName="TextChanged">
<behaviours:ExecuteCommandAction Command="{Binding Path=DataContext.ValidateCommand,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type UserControl}}}"
CommandParameter="PassTheColumnHere"/>
</interactivity:EventTrigger>
</interactivity:Interaction.Triggers>
</TextBox>
您可能需要根据您的要求进行2次更改: 1.而不是Ancestortype“Usercontrol”(如果您的xaml不是用户控件“),而是给出文件名。 2.通过命令参数,在您的情况下,您提到的列。
之后在视图模型中声明命令“ValidateCommand”:
public ICommand ValidateCommand{ get; private set; }
在构造函数内部初始化它:
ValidateCommand = new DelegateCommand<Column>(Validate);
以及您可以在方法中实现的其余逻辑:
public void Validate(Column c){
//your logic
}