c# - WPF 中的实例绑定(bind)与 MVVM

标签 c# wpf xaml mvvm data-binding

我是 WPF 的新手和 MVVM模式,对如何实现有点困惑data-binding到预先存在的实例。我明白在 MVVM你有Model="business logic" , ViewModel="presentation logic" , View="actual presentation" .

不幸的是,我目前无法弄清楚您将如何将您的 View 绑定(bind)到 ViewModel 的现有实例。和相应的模型。例如,我发现了这个 MVVM tutorial ,我喜欢,但它也只是创建了 Model inside the ViewModel .

那么我将如何从我的底层应用程序中使用先前实例化的模型呢?

编辑 :所以我正在尝试在一个小型测试项目中尝试 Gusdor 提出的方法,但无法使其正常工作。我收到一个错误 'WpfBindingTesting.App.MyViewModel' is a 'field', but used like a 'type'在 App.xaml.cs 中(见下文)。我希望有人能发现我做错了什么。这是我的代码:

View 模型:

namespace WpfBindingTesting
{
    class ViewModel
    {
        private List<string> names;
        public List<string> Names
        {
            get { return names; }
            set { names = value; }
        }

        public ViewModel()
        {
            Names = new List<string> { "string1", "string2", "string3" };
        }
    }
}

MainWindow.xaml.cs:
namespace WpfBindingTesting
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

MainWindow.xaml:
<Window x:Class="WpfBindingTesting.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        DataContext = "{Binding RelativeSource={RelativeSource Mode=Self}}"
        >

        <StackPanel>
            <ListBox
                ItemsSource="{Binding Path=Names}"
                Height="50"
                >
            </ListBox>
    </StackPanel>
</Window>

应用程序.xaml.cs:
namespace WpfBindingTesting
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        public App(){
            MainWindow View = new MainWindow();
            ViewModel MyViewModel = new ViewModel();
            View.DataContext = MyViewModel; // this give error: 'WpfBindingTesting.App.MyViewModel' is a 'field', but used like a 'type'
            //view.DataContext = new ViewModel();
            //view.Show();
        }
    }
}

最佳答案

一般来说,我们将 View 模型分配给 View 的DataContext属性(property)。

只要您有对 View 的引用,就可以从代码中执行此操作。这是代码:

C夏普

Window view = new Window();

// add a view model
view.DataContext = new ViewModel() { Title = "View Model 1" };
view.Show();

// add another view model to demonstrate the binding
view.DataContext = new ViewModel() { Title = "View Model 2" };

XAML

窗口的 XAML 可能看起来像这样。
<Window Title={Binding Title}>
</Window>

注意 SourceElementName绑定(bind)声明中仍未指定属性?这指示 Binding 使用当前的 DataContext作为源。

关于c# - WPF 中的实例绑定(bind)与 MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34761296/

相关文章:

xaml - ISupportIncrementalLoading 结合 VariableSizedWrapGrid

WPF:无法设置转换器 - 启动应用程序时出错

c# - 数据绑定(bind) - 设置默认值

c# - 如何使用 C# 在 MVC 布局 View 中编辑 CSS 类

c# - 在 LINQ 中选择多维数组

c# - 如何使用验证保持 ViewModel 和 View 同步

c# - 在 Xamarin.Forms 上将 Activityindicator 居中

wpf - ComboBox.Text 未考虑 ItemStringFormat 属性

c# - 什么是语句的不可到达端点(unreachable endpoint)?

c# - MoveFileEx 无法正常工作?