在viewmodel中调用视图内的控件(xaml文件)

时间:2015-06-18 11:30:57

标签: wpf vb.net mvvm

我想调用视图中的控件,如viewmodel中的按钮和项模板。请告诉我该怎么做。我的观点包含以下内容

<ItemsControl Name="cDetails"
            Width="395"
            ItemTemplate="{DynamicResource Test}"
            ItemsSource="{Binding ViewModels}"
            Visibility="{Binding IsLoaded,
                                Converter={StaticResource visibilityConverter}}">

    <Button Name="btnComplete"
        Grid.Column="1"
        HorizontalAlignment="Center"
        Command="{Binding AuditCommand}"
        CommandParameter="1">
        Complete
    </Button>

请告诉我如何使用vb.net在我的viewmodel中调用这些项目。

由于

2 个答案:

答案 0 :(得分:2)

从viewmodel中访问视图组件不是在MVVM中执行操作的方法。因为它不是专门设计用于这种方式的,所以你必须尽力使它工作。您可能应该调查如何正确使用MVVM实现目标,或者放弃使用MVVM并在代码隐藏中完成工作。

由于您尚未描述您的目标,因此很难提供具体的建议。通常,在使用MVVM时,您可以操纵viewmodel中的内容并设置属性。您的视图绑定到这些属性,以便在设置时适当更新。您的viewmodel不直接操作视图本身,只是它们绑定的viewmodel属性。

例如,我们假设您要更新TextBlock上的文字。你可以在xaml中做这样的事情:

<TextBlock Text="{Binding SomeText}" />

然后,您的viewmodel(应该implement the INotifyPropertyChanged interface)定义此属性并根据需要进行设置。

public string SomeText
{
    get { return _someText; }
    set
    {
        if (_someText != value)
        {
            _someText = value;
            NotifyPropertyChanged("SomeText");
        }
    }
}
private string _someText;

...

// At any time, you can set the property, and the
// binding will update the text in the control for you.
SomeText = "Some text";

如果你绝对需要从代码中操作你的视图(或者你没有使用MVVM),那么这类代码的适当位置是&#34; xaml.cs&#34;文件旁边的文件(代码隐藏)。您可以使用<TextBlock x:Name="SomeTextBlock" />等语法为xaml中的任何内容指定名称,然后从代码隐藏中将其作为具有相同名称的成员变量进行访问。例如,您可以执行SomeTextBlock.Text = "Some text"。但是,如果您使用的是MVVM,则绝大多数用例通常不需要这样做。

答案 1 :(得分:0)

您不应该尝试直接从ViewModel访问控件。 ViewModel必须不了解View实现。

相反,在WPF中,我们通过Bindings连接View和ViewModel。绑定使用ViewModel中的Properties连接View中控件的属性。

命令是一种特殊类型的属性,可以绑定为Button等控件的操作。

在您的示例中,您需要在ViewModel中包含这些属性:

  • 名为ViewModels
  • 的集合
  • 名为IsLoaded
  • 的布尔值
  • 一个名为AuditCommand
  • 的ICommand

通过管理这些属性,您应该能够控制视图中显示的内容及其行为。

如果您需要更多控制权,请为其他媒体资源创建更多Binding,或在ViewModel中创建一些事件,并从View的代码隐藏中管理它们。

相关问题