Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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# wpf中绑定对象的规则_C#_Wpf_Binding - Fatal编程技术网

C# wpf中绑定对象的规则

C# wpf中绑定对象的规则,c#,wpf,binding,C#,Wpf,Binding,在另一个类中,我很难将列表视图与可观察集合绑定 我的xaml: <ListView Height="117" HorizontalAlignment="Left" Margin="20,239,0,0" Name="lvResults" VerticalAlignment="Top" Width="759" ItemsSource="{Binding RuleSearch.FileMatches}"> <ListView.View>

在另一个类中,我很难将
列表视图
可观察集合
绑定

我的xaml:

<ListView Height="117" HorizontalAlignment="Left" Margin="20,239,0,0" Name="lvResults" VerticalAlignment="Top" Width="759" ItemsSource="{Binding RuleSearch.FileMatches}">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding FileName}"/>
                <GridViewColumn Header="Size" Width="120" DisplayMemberBinding="{Binding DirectoryName}"/>
                <GridViewColumn Header="Date" Width="120" DisplayMemberBinding="{Binding Size}"/>
                <GridViewColumn Header="Full Path" Width="120" />
                <GridViewColumn Header="Some Meaningless Data" Width="120" />
            </GridView>
        </ListView.View>
    </ListView>
在搜索类中:

public ObservableCollection<Result> FileMatches { get; private set; }
成绩类别:

    public class Result
   {
      public string FileName { get; set; }
      public string DirectoryName { get; set; }
      public string FullNamePath { get; set; }
      public long Size { get; set; }
      public string Extension { get; set; }
      public FileAttributes Attributes { get; set; }

   }

问题是,我正在自学wpf,但在wpf中找不到数据绑定的规则集。我知道它需要财产和公共财产,除了我被卡住

可能您的listViews DataContext没有设置为UserControls或Windows或任何您拥有RuleSearch道具的位置

您可以在xaml.cs代码隐藏中进行设置

lvResult.DataContext = this;
或者在xaml中

<ListView Height="117" HorizontalAlignment="Left" Margin="20,239,0,0" Name="lvResults" VerticalAlignment="Top" Width="759" ItemsSource="{Binding Path=RuleSearch.FileMatches, RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding FileName}"/>
            <GridViewColumn Header="Size" Width="120" DisplayMemberBinding="{Binding DirectoryName}"/>
            <GridViewColumn Header="Date" Width="120" DisplayMemberBinding="{Binding Size}"/>
            <GridViewColumn Header="Full Path" Width="120" />
            <GridViewColumn Header="Some Meaningless Data" Width="120" />
        </GridView>
    </ListView.View>
</ListView>


其中TypeOfaceStor是用户控件/窗口的类型…

您的
搜索
类需要实现,它用于让UI知道代码隐藏中的属性何时更改(在本例中,
文件匹配
)。这将涉及注册对
FileMatches.CollectionChanged
事件的回调,然后引发属性名为“FileMatches”的
INotifyPropertyChanged.PropertyChanged
事件


请注意,如果希望集合中的值与UI保持同步,还应在结果类上实现INotifyPropertyChanged。(通过查看代码,结果类的内容看起来是恒定的,因此无需执行此操作)。

如果您说您遇到了困难,请具体说明问题所在。你在哪里设置数据上下文,如果有的话?@bigdady,我想我指定的问题是我无法绑定。我在xaml中绑定DataContext:
ItemsSource=“{Binding RuleSearch.FileMatches}”
我甚至尝试了几个不同的变体。一个在代码隐藏中…我以前尝试过的代码隐藏不起作用。我刚刚试过你的xaml部分,似乎我得到了一些东西。我认为这是好的,因为我在我的可观察到的集合上得到了一个错误,关于我如何不再被允许在不同的线程上更改它的值。胡说八道,天才!如果我把它从不同的线上取下来,它就会工作。。。不过我有两个问题:1-你能把我链接到哪里,让我更了解那段xaml代码吗?2-无论如何,我可以把这个放在另一个线程上?因为我需要不使用lag.see,您可以使用Dispatcher.Invoke在另一个线程上执行此操作。请看答案。不幸的是,我以前试过这个,但也不起作用。但是谢谢。在不改变INotifyPropertyChanged的情况下,唯一的方法是在UI需要显示之前数据已经准备好。如果它恰好在没有INotifyPropertyCHanged的情况下工作,那么您可能很幸运,您的离线任务恰好在显示UI之前完成。
lvResult.DataContext = this;
<ListView Height="117" HorizontalAlignment="Left" Margin="20,239,0,0" Name="lvResults" VerticalAlignment="Top" Width="759" ItemsSource="{Binding Path=RuleSearch.FileMatches, RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding FileName}"/>
            <GridViewColumn Header="Size" Width="120" DisplayMemberBinding="{Binding DirectoryName}"/>
            <GridViewColumn Header="Date" Width="120" DisplayMemberBinding="{Binding Size}"/>
            <GridViewColumn Header="Full Path" Width="120" />
            <GridViewColumn Header="Some Meaningless Data" Width="120" />
        </GridView>
    </ListView.View>
</ListView>