【问题标题】:Loading and binding a serialized view model to a WPF window?加载序列化视图模型并将其绑定到 WPF 窗口?
【发布时间】:2010-03-17 02:01:15
【问题描述】:

我正在为一个简单的 ETL 工具编写单窗口 UI。 UI 由窗口、窗口背后的代码、窗口的视图模型和业务逻辑组成。我想为用户提供保存 UI 状态的功能,因为大约 10-12 个文本框的内容将在会话之间重用,但特定于用户。我想我可以序列化包含来自文本框的所有数据的视图模型,这工作正常,但我无法将序列化 XML 文件中的信息加载回文本框中。

窗口的构造函数:

    public ETLWindow()
    {
        InitializeComponent();

        _viewModel = new ViewModel();

        this.DataContext = _viewModel;
        _viewModel.State = Constants.STATE_IDLE;

        Loaded += new RoutedEventHandler(MainWindow_Loaded);
    }

XAML:

<TextBox x:Name="targetDirectory" 
         IsReadOnly="true"
         Text="{Binding TargetDatabaseDirectory, UpdateSourceTrigger=PropertyChanged}"/>

ViewModel对应属性:

    private string _targetDatabaseDirectory;
    [XmlElement()]
    public string TargetDatabaseDirectory
    { 
        get { return _targetDatabaseDirectory; }
        set { _targetDatabaseDirectory = value; OnPropertyChanged(DataUtilities.General.Utilities.GetPropertyName(() => new ViewModel().TargetDatabaseDirectory)); }

在后面的代码中加载事件:

    private void loadState_Click(object sender, RoutedEventArgs e)
    {
        string statePath = this.getFilePath();
        _viewModel = ViewModel.LoadModel(statePath);
    }

您可以猜到,LoadModel 方法对用户驱动器上的序列化文件进行反序列化。

我在网上找不到很多关于这个问题的信息。我知道这可能与我的绑定有关。反序列化视图模型后,是否有某种方法可以刷新 XAML 上的绑定?或者也许刷新视图模型上的所有属性?还是我完全疯了,认为这一切都可以做到?

谢谢。

【问题讨论】:

    标签: wpf binding viewmodel serialization


    【解决方案1】:

    假设您的 loadState_Click 事件在您背后的 Window 代码上,您可以试试这个。

    private void loadState_Click(object sender, RoutedEventArgs e) 
    { 
        string statePath = this.getFilePath(); 
        this.DataContext = ViewModel.LoadModel(statePath); 
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-13
      • 2023-03-06
      • 2012-09-29
      • 2011-10-07
      • 1970-01-01
      • 2011-02-20
      相关资源
      最近更新 更多