gpt4 book ai didi

c# - WPF 用户控件绑定(bind)

转载 作者:太空宇宙 更新时间:2023-11-03 14:49:19 32 4
gpt4 key购买 nike

<分区>

一些背景知识:我正在努力研究 Windows Presentation Foundation 的数据绑定(bind)。我理解其中的大部分内容(或者至少,我认为我理解),但是尝试将数据从父控件绑定(bind)到用户控件让我感到困惑。也感觉互联网上的每个人对此都有不同的方法,这无济于事。

我目前正在创建一个小控件来管理正在处理的文件,然后上传到服务。现在的控件很简单,只显示文件名和路径。它最终会随着复杂性的增加而增长,所以我现在想取消绑定(bind)。

问题是尽管 UploadFiles 被正确绑定(bind)并且 FullName 按预期工作(显示 FileInfo.FullName Prop ),但我无法从 ListView 绑定(bind)到控件。理想情况下,我想绑定(bind)到 ViewModel 的 File 对象,然后从那里开始。

使用控件,其中 UploadFiles 是一个可观察的 FileInfo 列表:

<ScrollViewer VerticalScrollBarVisibility="Auto">
<ListView ItemsSource="{Binding UploadFiles}" Margin="5">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding FullName}" />
<controls:ControlUploadDataItem File="{Binding}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ScrollViewer>

UploadControl XAML(命名空间混淆):

<UserControl x:Class="-----.Controls.ControlUploadDataItem"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:-----.Controls"
mc:Ignorable="d"
d:DesignWidth="300"
x:Name="UploadDataItem">
<StackPanel Background="{StaticResource SecondaryColorBrush}" Margin="0, 0, 0, 10">
<TextBlock FontSize="20" FontWeight="Bold" Foreground="{StaticResource PrimaryColorBrush}" Text="{Binding File.Name, ElementName=UploadDataItem, FallbackValue='File Name'}" />
<TextBlock FontSize="10" FontStyle="Italic" Foreground="Gray" Text="{Binding File.FullName, ElementName=UploadDataItem, FallbackValue='x:\\file\\path\\here'}" />

<!--<TextBlock FontWeight="Bold" Foreground="{StaticResource PrimaryColorBrush}" Text="{Binding File.Name, FallbackValue='File Name'}" />-->
</StackPanel>

最后是背后的代码:

/// <summary>
/// Interaction logic for UploadItem.xaml
/// </summary>
public partial class ControlUploadDataItem : UserControl
{

public ControlUploadDataItem()
{
InitializeComponent();
this.DataContext = new UploadDataViewModel();
}
}

internal class UploadDataViewModel: ViewModelBase
{

private FileInfo _file;

public FileInfo File
{
get { return _file; }

set
{
_file = value;
// Refresh(); ?
OnPropChanged(nameof(File));
}
}
}

internal class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

protected void OnPropChanged(string prop)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
}
}

我希望这个控件能够处理与上传文件有关的所有事情;也就是说,将文件显示为待处理,正在处理时显示上传栏,完成时显示“最终结果”。

问题是..我做错了什么,绑定(bind)文件数据?

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