gpt4 book ai didi

c# - 了解数据绑定(bind)

转载 作者:行者123 更新时间:2023-11-30 20:07:03 27 4
gpt4 key购买 nike

我是 WPF 和整个数据绑定(bind)的新手。我读了几篇文章,我对如何将我的数据绑定(bind)到 UI 元素感到很困惑。

我看到一个帖子是这样做的:

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="myWindow">
<Grid>
<TextBox Text="{Binding Path=Speed, ElementName=myWindow}" />
</Grid>
</Window>

假设 Speed是代码隐藏文件中定义的属性/成员。其他一些人使用 static 资源 命名绑定(bind)并引用这个和其他人命名为 DataContext用于绑定(bind)。现在,因为我是 WPF 数据绑定(bind)的新手,所以我很不确定是否存在关于使用哪种数据绑定(bind)的最佳实践方法。

基本上我想知道为什么必须有几个类属性被定义为底层 View 模型的连接器,我虽然这东西更“动态”。

我的目标是仅拥有 XAML 文件,而无需将任何内容添加到 *.xaml.cs 代码隐藏文件中。例如:我有一个名为 MainWindowViewModel 的类(将代表我的 ViewModel)具有 ObservableCollection<string> 类型的成员我想绑定(bind)一个 ListBox (在我看来)这个系列。到目前为止我得到这个工作的唯一方法是使用第一个案例,ElementName ,我必须在 View 类中添加一个属性作为一种连接器。就像这样:

主窗口.xaml:

<Window x:Class="Sample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="MW" Title="MainWindow" Height="419" Width="463">
<Grid>
<ListBox ItemsSource="{Binding ElementName=MW, Path=ListerResultConnector}" />
</Grid>
</Window>

主窗口.xaml.cs:

private ObservableCollection<string> mListerResultData = MainWindowViewModel.Instance.RetrievalStringResults;
public ObservableCollection<string> ListerResultConnector
{
get { return mListerResultData; }
}

我的问题是,是否存在将数据绑定(bind)到我的 UI 的更智能的方法,如在代码隐藏文件中用作进一步的“连接器”属性。

最佳答案

您的 ViewModel 应该设置为 View 的 DataContext。那么您在代码隐藏中不需要任何“进一步的连接器”。 Binding 实际上指的是 DataContext,如果您不设置它,它仍然是“this”,对应于您的代码隐藏文件(这只是您 View 的一部分)。

另外,看看:WPF Apps With The Model-View-ViewModel Design Pattern

您应该首先了解 WPF 及其绑定(bind)基础知识,但是一旦您理解了这些,我建议您查看 Caliburn Micro及其基于约定的绑定(bind)、事件处理和其他功能,使您的代码更加简洁。

关于c# - 了解数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8974015/

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