silverlight - 双向将组合框绑定(bind)到简单的字符串数组

标签 silverlight data-binding

我有一个提供如下状态代码的简单类:

public class StateProvider
{
    static string[] _codes = new string[]
    {
        "AL",
        "AK",
        ...
    };

    public string[] GetAll()
    {
        return _codes;
    }
}

我支持 View 的模型类看起来有点像这样:

public class ProjectModel : ChangeNotifier
{
    StateProvider _states = new StateProvider();

    public ProjectModel()
    {
        Project = LoadProject();
    }

    ProjectEntity _project;
    public ProjectEntity Project
    {
        get { return _project; }

        set
        {
            _project = value;
            FirePropertyChanged("Project");
        }
    }

    public string[] States { get { return _states.GetAll(); } }
}

我的 ComboBox XAML 如下所示:

<ComboBox SelectedValue="{Binding Project.State, Mode=TwoWay}" SelectedValuePath="{Binding RelativeSource={RelativeSource Self}}" ItemsSource="{Binding States}" />

从 UI 到实体的绑定(bind)工作 - 如果我从组合中选择状态,那么值将被推送到项目实体,我可以保存它。但是,如果我关闭并重新加载,状态代码值不会从实体绑定(bind)到 UI,并且组合显示未选择任何内容。然后,当然,随后的保存会使实体的状态值为空。

我希望这非常简单,因为我想显示州代码并保存州代码(我不想显示完整的州名称)。因此,我不想费心创建一个具有 Code 和 FullName 属性的 State 类,并避免使用组合框的 SelectedValuePath 和 DisplayMemberPath 属性。

编辑: 添加到代码中 ProjectModel 如何进行更改通知。请注意,ProjectEntity 类也执行此操作。相信我,它有效。我将其排除在外是因为它还继承自通过反射进行更改通知的 Entity 基类。 TwoWay 绑定(bind)适用于组合框以外的所有内容。

最佳答案

您至少必须在您的 ProjectModel 类上实现 IPropertyNotifyChanged

public class ProjectModel : INotifyPropertyChanged
{
        public event PropertyChangedEventHandler PropertyChanged;

并实现如下所示的 Project 属性以绑定(bind)到 1-way-1-time 以外的工作。

public ProjectEntity Project
{
    get { return (ProjectEntity)GetValue(ProjectProperty); }
    set { SetValue(ProjectProperty, value); }
}

// Using a DependencyProperty as the backing store for Project.  
// This enables animation, styling, binding, etc...
public static readonly DependencyProperty ProjectProperty =
    DependencyProperty.Register("Project",
                                typeof(ProjectEntity),
                                typeof(ProjectModel),
                                new PropertyMetadata(null,
                                    new PropertyChangedCallback(OnProjectChanged)));

static void OnProjectChanged(object sender, DependencyPropertyChangedEventArgs args)
{
    // If you need to handle changes
}

关于silverlight - 双向将组合框绑定(bind)到简单的字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3729146/

相关文章:

c# - 使用 Silverlight/IIS 的双工轮询的可扩展性

c# - WP 7 多线程,无效的跨线程访问

javascript - knockout : changing options in select list without clearing value in view-model

wpf - Enum 的 DataStateBehavior 而不是 bool?字符串?

.net - Silverlight的TextWrapping中的拆分字符是什么?

silverlight - Silverlight MVVM header 详细信息

javascript - 如何判断用户退出Silverlight时是点击了“确定”还是“取消”?

javascript - 与 Angular Directive(指令) Controller 的两种方式数据绑定(bind)

c# - View 模型中的 MVVM throbber

data-binding - Blazor 子组件渲染和参数更改