Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定到ObservableCollection的ListView<;T>;不';添加到属性时不更新_C#_Wpf_Xaml - Fatal编程技术网

C# 绑定到ObservableCollection的ListView<;T>;不';添加到属性时不更新

C# 绑定到ObservableCollection的ListView<;T>;不';添加到属性时不更新,c#,wpf,xaml,C#,Wpf,Xaml,我正在构建一个文件资源管理器,当用户双击树视图时,它会触发此事件。它填充绑定到我的ListView的名为File\u List的ObservableCollection。FillCollection方法使用正确的信息填充FileList 我已经将这一点从填写c改为绑定,因为我认为这样更容易维护。谢谢你抽出时间。有一种方法告诉我如何使用INotifyPropertyChanged我有一种RaisedPropertyChanged方法 private void folderItems_MouseDo

我正在构建一个文件资源管理器,当用户双击树视图时,它会触发此事件。它填充绑定到我的ListView的名为
File\u List
ObservableCollection
。FillCollection方法使用正确的信息填充FileList

我已经将这一点从填写c改为绑定,因为我认为这样更容易维护。谢谢你抽出时间。有一种方法告诉我如何使用
INotifyPropertyChanged
我有一种
RaisedPropertyChanged
方法

private void folderItems_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    try
    {

        TreeViewItem item = (TreeViewItem)folderItems.SelectedItem;
        FileAttributes attr = File.GetAttributes(item.Tag.ToString());
        if ((attr & FileAttributes.Directory) == FileAttributes.Directory)
        {
            _ViewModel.FileList = FillFileModel.FillCollection(item.Tag.ToString());
        }
        else
        {
           //Do something else
        }

    }
    catch (Exception) { }
}
FillFileModel类

public static ObservableCollection<Files> FillCollection(string Path)
{
    ObservableCollection<Files> files = new ObservableCollection<Files>();

    var searchDirectory = new DirectoryInfo(Path);
    try
    {
        Files getFile;
        foreach (var file in searchDirectory.GetFiles())
        {
            getFile = new Files
            {
                FileName = file.Name,
                FileSize = file.Length.ToString("#,##0 KB"),
                DateModified = file.LastWriteTime,
                FileType = getFileType(file.FullName)
            };

            files.Add(getFile);
        }
    }
    catch (Exception)
    {
    }
    return files;
}
公共静态ObservableCollection FillCollection(字符串路径)
{
ObservableCollection文件=新的ObservableCollection();
var searchDirectory=新目录信息(路径);
尝试
{
文件获取文件;
foreach(searchDirectory.GetFiles()中的var文件)
{
getFile=新文件
{
FileName=file.Name,
FileSize=file.Length.ToString(“#,##0 KB”),
DateModified=file.LastWriteTime,
FileType=getFileType(file.FullName)
};
添加(getFile);
}
}
捕获(例外)
{
}
归还文件;
}
绑定属性:

public ObservableCollection<Files> FileList
{
    get { return _FileList; }
    set
    {
        if (_FileList!=value)
        {
            _FileList = value;
            RaisedPropertyChanged("FileList");
        }
    }
}
公共ObservableCollection文件列表
{
获取{return\u FileList;}
设置
{
if(_FileList!=值)
{
_FileList=value;
RaisedPropertyChanged(“文件列表”);
}
}
}
提升的属性已更改

public event PropertyChangedEventHandler PropertyChanged;

protected void RaisedPropertyChanged(string propertyName)
{
    PropertyChangedEventHandler handler = this.PropertyChanged;
    if (handler != null)
    {
        PropertyChangedEventArgs args = new PropertyChangedEventArgs(propertyName);
        handler(this, args);
    }
}


**XAML:**
<Window.Resources>
    <uc:ucNav x:Key="Nav"/>        
    <uc:FileExplorerViewModel x:Key="viewModel"/>
    <local:FileImageConverter x:Key="ImageConverter"/>
</Window.Resources>

 <ListView Width="580" Margin="205,32,9,10" x:Name="File_List" ItemsSource="{Binding Path=FileList}">
    <ListView.View>
        <GridView>
            <GridViewColumn Width="150" Header="Name" >
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <Image Source="{Binding Converter={StaticResource ImageConverter}}" Height="20" Width="20" Stretch="Fill"/>
                            <TextBlock x:Name="file_Name" Text="{Binding FileName}"/>
                        </StackPanel>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Width="150">
                <GridViewColumnHeader>
                    <TextBlock Text="Date Modified" />
                </GridViewColumnHeader>
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock x:Name="Date_Modified"  Text="{Binding DateModified}"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Width="150">
                <GridViewColumnHeader>
                    <TextBlock Text="File Type" />
                </GridViewColumnHeader>
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock x:Name="File_Type" Text="{Binding FileType}"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Width="130">
                <GridViewColumnHeader>
                    <TextBlock Text="File Size" />
                </GridViewColumnHeader>
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock x:Name="File_Size" Text="{Binding FileSize}"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>

        </GridView>
    </ListView.View>
</ListView>
public event propertychangedventhandler PropertyChanged;
受保护的void RaisedPropertyChanged(字符串propertyName)
{
PropertyChangedEventHandler处理程序=this.PropertyChanged;
if(处理程序!=null)
{
PropertyChangedEventArgs args=新的PropertyChangedEventArgs(propertyName);
处理程序(this,args);
}
}
**XAML:**

听起来您的DataContext设置不正确,因为您发布的其他代码看起来是正确的

在单击处理程序中放置一个断点,并仔细检查
File\u List.DataContext==\u ViewModel


DataContext
通常从父控件继承,如果这是最上面的窗口,也可以从后面的代码设置。在极少数情况下,您还可以绑定或设置值,但通常不建议这样做,因为这可能会导致混淆和调试问题。

除了
PropertyChanged
事件之外,您是否在ViewModel类上实现了
INotifyPropertyChanged
接口?是的,我添加了在raisedpropertychangedddid下将XAML DataContext设置为viewmodel?设置断点时会发生什么?您的活动链的哪一部分不起作用?