我是 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>
注意
Source
或 ElementName
绑定(bind)声明中仍未指定属性?这指示 Binding 使用当前的 DataContext
作为源。
关于c# - WPF 中的实例绑定(bind)与 MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34761296/