深度属性绑定与Caliburn微问题

本文关键字:问题 Caliburn 属性 绑定 深度 | 更新日期: 2023-09-27 18:14:22

我只是不知道我做错了什么。我试图在WPF应用程序(4.5)上使用Caliburn Micro。试着追随MVVM的价值。

我的虚拟机具有服务和授权属性。授权有一个SelectedService属性。我已经命名了我的控件x:Name=Services,当我填充服务属性时,它们出现在RadGridView中,但是当你选择RadGridView中的一个项目时,它不会将SelectedItem绑定回我的SelectedService属性。是因为Services属性在一个级别上,而SelectedService是更深一层的Authorizations.SelectedService吗?

下面是我的代码,我敢在不淹没帖子的情况下发布。希望这足够了。

我觉得我很接近"得到"Caliburn Micro和MVVM的一般....

public class Authorization:BindableBase
{
    public int ID
    {
        get { return this.id; }
        set
        {
            this.id = value;
            this.OnPropertyChanged();
        }
    }
    public Service SelectedService
    {
        get { return this.selectedService; }
        set
        {
            this.selectedService = value;
            OnPropertyChanged();
        }
    }
    public Member ActiveMember
    {
        get { return this.activeMember; }
        set
        {
            this.activeMember = value;
            this.OnPropertyChanged();
        }
    }
}

然后CreateAuthViewModel有那个Model还有一个属性用来填充可能的选项叫做Services

[Export(typeof(IScreen))]
public class CreateAuthViewModel : Screen, IHandle<MessageNotifier>
{     
    public Authorization Authorization
    {
        get { return this.authorization; }
        set
        {
            this.authorization = value;
            NotifyOfPropertyChange();
        }
    }
    public BindableCollection<Service> Services
    {
        get { return services; }
        set
        {
            services = value;
            NotifyOfPropertyChange();
        }
    }

最后是我的视图CreateAuthView:

<UserControl x:Name="CreateAuthUserControl"
             x:Class="Green.Views.CreateAuthView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
             xmlns:cal="http://www.caliburnproject.org">
  <telerik:RadExpander>
    <StackPanel>
      <telerik:RadGridView x:Name="Services"
                           IsReadOnly="True"
                           SelectionMode="Extended"
                           ScrollViewer.CanContentScroll="True" />
      <telerik:RadDataPager x:Name="ServicesDataPager"
                            PageSize="10"
                            VerticalAlignment="Bottom"
                            Source="{Binding Items, ElementName=Services}" />
    </StackPanel>
  </telerik:RadExpander>
</UserControl>

深度属性绑定与Caliburn微问题

没有现成的Telerik约定,因为这需要依赖Telerik控件。您可以看看如何编写自己的约定,或者使用Caliburn.Micro.Telerik项目,该项目可作为NuGet包获得。