gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:58:02 26 4
gpt4 key购买 nike

我是 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com