【发布时间】:2016-02-07 18:10:23
【问题描述】:
我目前正在开发一个 UWP 应用程序,我想使用已编译的绑定系统。
我有一个扩展 Windows.UI.Xaml.Controls.Page 的基础,其中包含一个属性 ViewModel。
这里是ViewModel属性的基类:
public class BaseViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void RaiseOnPropertyChanged([CallerMemberName] string propertyName = "")
{
OnPropertyChanged(propertyName);
}
public void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
这里是我的基本页面:
public abstract class BasePage : Page
{
public BaseViewModel ViewModel { get; set; }
}
我的应用程序的页面扩展了 BasePage 并包含一个扩展 BaseViewModel 类的嵌套(内部)类。这是一个示例代码:
public sealed partial class MyPage : BasePage
{
public sealed class MyViewModel : BaseViewModel
{
public string Title
{
get
{
return "Test";
}
}
}
public MyPage()
{
InitializeComponent();
ViewModel = MyViewModel();
}
}
现在,我想将 MyViewModel 类的属性 Title 绑定到我的 UI。根据this article 和this one,这样的东西应该可以工作:
<TextBlock
Text="{x:Bind ViewModel.(namespace:MyPage+MyViewModel.Title)}"
/>
很遗憾,我无法编译。由于“+”字符,生成的文件MyPage.g.cs 有几个错误。您知道 UWP 应用程序是否支持嵌套(内部)类的绑定?也许它仅在 WPF 应用程序上受支持? :(
感谢您的帮助!
【问题讨论】:
-
你试过简单写
{x:Bind ViewModel.Title}吗? -
@KooKiz :是的,我试过了,但是我有一个编译错误。找不到类型
BaseViewModel的属性Title。这就是我选择MyViewModel的原因。如果我在一个单独的文件中定义我的MyViewModel类,则演员表工作正常。我只在MyViewModel类是嵌套类时遇到问题。所以从技术上讲,我知道解决方法,但我喜欢嵌套类,所以我想尝试使用嵌套类:D