相关疑难解决方法(0)

如何在ViewModel中处理Validation.Error而不是我后面的View代码?

我正在尝试让WPF验证在MVVM模式下工作.

在我的视图中,我可以验证像这样的TextBox,它由代码隐藏方法"HandleError"处理,工作正常:

<TextBox Width="200"
         Validation.Error="HandleError">
    <TextBox.Text>
        <Binding Path="FirstName"
             NotifyOnValidationError="True"
             Mode="TwoWay">
            <Binding.ValidationRules>
                <validators:DataTypeLineIsValid/>
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>
Run Code Online (Sandbox Code Playgroud)

但是,我想通过DelegateCommand处理我的ViewModel中的验证,但是当我使用以下代码尝试它时,我得到显式错误" '{Binding HandleErrorCommand}'不是有效的事件处理程序方法名.只有实例方法生成的或代码隐藏的类是有效的. "

有没有解决方法,以便我们可以处理MVVM模式中的验证?

视图:

<TextBox Width="200"
         Validation.Error="{Binding HandleErrorCommand}">
    <TextBox.Text>
        <Binding Path="FirstName"
             NotifyOnValidationError="True"
             Mode="TwoWay">
            <Binding.ValidationRules>
                <validators:DataTypeLineIsValid/>
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>
Run Code Online (Sandbox Code Playgroud)

视图模型:

#region DelegateCommand: HandleError
private DelegateCommand handleErrorCommand;

public ICommand HandleErrorCommand
{
    get
    {
        if (handleErrorCommand == null)
        {
            handleErrorCommand = new DelegateCommand(HandleError, CanHandleError);
        }
        return handleErrorCommand;
    }
}

private void HandleError()
{
    MessageBox.Show("in view model");
}

private bool CanHandleError()
{
    return true;
} …
Run Code Online (Sandbox Code Playgroud)

c# validation wpf mvvm

7
推荐指数
2
解决办法
2万
查看次数

究竟什么是"WPF服务"?

有人在回答stackoverflow问题时告诉我,MVVM模式的"两大枪"是1)附加行为和2)服务.我认为他的意思是" WPF服务 "这个短语,我发现它在以下方面使用:

PresentationFoundation.dll定义了WPF控件类型,动画和多媒体支持,数据绑定支持以及其他WPF服务.

许多这些WPF服务(解耦事件,丰富的数据绑定,样式,资源等)是软件开发最佳实践,它们集中在单个声明性UI堆栈中.

您将了解WPF背后的动机,学习XAML的语法,检查核心编程模型,并调查几个WPF服务.

我甚至没有提到"WPF服务"这样的WPF书籍,所以这只是一个词,意思是" WPF功能 ",例如分离事件,丰富的数据绑定,样式等等,或者"WPF"这个术语背后还有其他什么服务"?

wpf service mvvm

6
推荐指数
2
解决办法
9305
查看次数

WPF:如何触发GUI行为以响应视图模型事件?

我正在开发一个WPF/MVVM应用程序,我有一个列表框绑定到ViewModel中的数据.在不同的点我需要视图模型使列表框滚动到给定的元素.

如何在不创建自定义控件的情况下执行此操作,同时仍保持良好的关注点分离?

我目前通过在视图层中创建一个自定义行为类来实现它的工作,该行具有依赖项属性VisibleIndex,然后XAML代码绑定到视图模型中的整数:

<ListBox x:Name="myListBox" 
        local:ListBoxVisibilityBehavior.VisibleIndex="{Binding VisibleIndex}">
Run Code Online (Sandbox Code Playgroud)

设置整数时,它会触发依赖项属性更新处理程序,该处理程序告诉列表框滚动到关联的索引.

这看起来有点hacky,因为依赖属性值永远不会被列表框更改,并且更新处理程序仅在值更改时被调用,因此确保相关项可见的唯一方法是执行以下操作:

// view-model code
this.VisibleIndex = -1;
this.VisibleIndex = 10;
Run Code Online (Sandbox Code Playgroud)

我目前使用行为类的唯一原因是绑定我的自定义依赖项属性,有没有办法用事件代替这样做?

data-binding wpf conceptual mvvm

6
推荐指数
1
解决办法
1270
查看次数

标签 统计

mvvm ×3

wpf ×3

c# ×1

conceptual ×1

data-binding ×1

service ×1

validation ×1