【问题标题】:MVVM Data Binding without Control不受控制的 MVVM 数据绑定
【发布时间】:2014-08-05 04:23:47
【问题描述】:

我正在使用 C#、XAML 和 MVVMLight 创建一个 MVVM 应用程序,但是我遇到了如何将数据从 ViewModel 绑定到模型而不显示在控件上的问题。例如,我在模型中有一个数据库,我需要确定它是否存在并具有有效数据。我从 ViewModel 中提供了它,我只想将值(可以是布尔值、字符串或其他)绑定到后台视图的代码,而不显示在 XAML 控件上(有点像资源) .问题是我无法弄清楚如何做到这一点。

<Page.Resources>
    <system:String x:Key="StringId" Text="{Binding Text}" />
</Page.Resources>

文本是由数据上下文提供的字段,如果有一种简单的方法可以访问数据上下文的值而不使用 ViewModel 文件夹中的任何包含,它也可能会起作用。

【问题讨论】:

  • 不能将属性Text从ViewModel绑定到View?或者你不是把数据从 View 带到 ViewModel 吗?
  • 如何将属性绑定到视图,以便 XAML 可以处理引用并且我可以从视图的代码中访问它?据我所知,将数据绑定到一个不可见的文本块是可行的,但有更好的方法吗?

标签: c# xaml data-binding mvvm mvvm-light


【解决方案1】:

试图在 Xaml 中将属性绑定到静态资源没有意义。因为,当您创建静态资源时,您不希望在您的 xaml 中重复相同的变量。但是这个目标可以通过绑定实现,不同之处在于 ViewModel 的绑定你可以从代码中修改这个属性。

现在,如果您想拥有可以从 ViewModel 修改的属性,只需在需要绑定的地方:

在你的代码中:

private string _property;
public string Property
    {
        get { return _property; }
        set { _property= value; RaisePropertyChanged("Property"); }
    }  

但你想要 xaml 中的属性:

    <UserControl.Resources>
        <System:String x:Key="Property">Text</System:String>
    </UserControl.Resources>

绑定将是:

<Label Content="{StaticResource Property}"/>

【讨论】:

  • 那么现在从 XAML .cs​​ 文件中获取资源的正确方法是什么?整个绑定的目标是从 View 访问 ViewModel 的属性,而不会显示在控件上,也不会在 View 和 ViewModel 之间进行任何不必要的引用。
  • 如果您想在 Xaml 和 ViewModel 中使用该属性,您必须执行我的第一个选项。如果您只想要 Xaml 中的可用属性,请使用第二个选项。我看不出其他情况会是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 2013-01-07
  • 1970-01-01
  • 2011-11-30
  • 2023-03-24
相关资源
最近更新 更多