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>