小编mun*_*esh的帖子

"{Binding Path =.}"和"{Binding}"是否真的相等

在我的WPF项目中,我有一个ListBox来显示List<string>集合中的项目.我想让这些项目的文本可编辑,所以我将每个项目包装在带有TextBox的ItemTemplate中(可能不是最好的方法,但我是WPF的新手).我只是将TextBoxes的Text属性绑定到每个项的值时遇到了麻烦.我最后偶然发现了一个使用单个点或句点作为其Path属性({Binding Path=.})的示例:

<ListBox ItemsSource="{Binding ElementName=recipesListbox,Path=SelectedItem.Steps}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBox Text="{Binding Path=.}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)

但是我不明白为什么单纯使用{Binding}不起作用.

根据微软的说法,它提出了" 双向绑定需要Path或XPath "的例外情况:

[...]句点(.)路径可用于绑定到当前源.例如,Text ="{Binding}"等同于Text ="{Binding Path =.}"

有人可以阐明这种模棱两可的行为吗?

编辑:此外,它似乎{Binding Path=.}不一定提供双向绑定,因为修改文本和移动焦点不会更新底层源(相同的源也具有在DataGrid控件上显示和成功修改的属性).我肯定在这里遗漏了一些东西.

wpf xaml binding path

46
推荐指数
4
解决办法
3万
查看次数

Update an ObservableCollection with a background worker in MVVM

Ok, I recently implemented a background worker to perform saving and loading of data.

However, getting this to work on a save command has proved difficult.

基本上,我的save命令生成一个事件,该事件通知集合视图模型,已添加Item,并且该项应添加到其自己的ObservableCollection中.

此时,我得到通常的异常,说我不能在不同的线程上更新ICollection.我已经尝试创建一个调用的新列表类型Dispatcher.Invoke,但是这仍然会生成相同的异常.

我想知道是否有其他人对如何最好地解决这个问题有任何建议?

所以目前我有一个继承自ObservableCollection的类:

public class ThreadSafeObservableCollection<T> : ObservableCollection<T>
{
    public ThreadSafeObservableCollection(List<T> collection)
        : base(collection)
    {
        dispatcher = Dispatcher.CurrentDispatcher;
        rwLock = new ReaderWriterLock();
    }

    protected override void InsertItem(int index, T item)
    {
        if (dispatcher.CheckAccess())
        {
            if (index > this.Count)
                return;
            LockCookie c = rwLock.UpgradeToWriterLock(-1);
            base.InsertItem(index, item);
            rwLock.DowngradeFromWriterLock(ref c);
        }
        else
        {
            object[] …
Run Code Online (Sandbox Code Playgroud)

c# wpf multithreading observablecollection

10
推荐指数
1
解决办法
8015
查看次数

C#WPF SizeChanged事件在最大化时不更新宽度和高度

使用更改表单大小时,我试图更新控件SizeChanged

除进入全屏模式外,它的运行效果非常理想。

我搜索了网格事件,但是找不到当用户最大化窗口(全屏显示)时发生的任何事件。

c# wpf resize dpi

5
推荐指数
1
解决办法
5932
查看次数

双击时将 DataGridView 单元格值提取到变量

在我的 C# DataGridView 中,双击一行后,我希望将“ID”列单元格中的值分配给变量。我该怎么做呢??

c# datagridview winforms

0
推荐指数
1
解决办法
8553
查看次数