相关疑难解决方法(0)

与lambdas一起使用的弱事件处理程序模型

好吧,所以这更像是一个答案而不是一个问题,但在提出这个问题之后,将Dustin Campbell,Egor的各个部分以及" IObservable/Rx/Reactive框架 "中的最后一个提示拉到一起,我想我为这个特殊问题制定了可行的解决方案.它可能会被IObservable/Rx/Reactive框架完全取代,但只有经验才会显示出来.

我故意创造了一个新问题,给我空间来解释我如何得到这个解决方案,因为它可能不会立即显而易见.

有很多相关的问题,大多数人告诉你,如果你想以后能够分离它们,你就不能使用内联lambda:

确实,如果希望以后能够分离它们,您需要保留对lambda的引用.但是,如果您只是希望事件处理程序在订阅者超出范围时自行分离,则此答案适合您.

.net c# events lambda memory-leaks

38
推荐指数
2
解决办法
1万
查看次数

分配给事件的lambda会阻止拥有对象的垃圾收集吗?

假设您有一个包含事件属性的类.如果在本地上下文中实例化此类,而没有外部引用,则会为事件分配lambda表达式以防止实例被垃圾回收?

{
    var o = new MyClass();
    o.MyClassEvent += (args) => {};
}
// Will 'o' be eligible for garbage collection here?
Run Code Online (Sandbox Code Playgroud)

c# events lambda garbage-collection

7
推荐指数
1
解决办法
937
查看次数

为什么在从UI中删除命令源后调用CanExecute?

我试图理解为什么在已从UI中删除的命令源上调用CanExecute.这是一个简化的程序来演示:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="350" Width="525">
    <StackPanel>
        <ListBox ItemsSource="{Binding Items}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <Button Content="{Binding Txt}" 
                                Command="{Binding Act}" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        <Button Content="Remove first item" Click="Button_Click"  />
    </StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)

代码隐藏:

public partial class MainWindow : Window
{
    public class Foo
    {
        static int _seq = 0;
        int _txt = _seq++;
        RelayCommand _act;
        public bool Removed = false;

        public string Txt { get { return _txt.ToString(); } }

        public ICommand Act
        {
            get
            {
                if (_act == null) …
Run Code Online (Sandbox Code Playgroud)

.net c# wpf binding mvvm

6
推荐指数
1
解决办法
2080
查看次数

标签 统计

c# ×3

.net ×2

events ×2

lambda ×2

binding ×1

garbage-collection ×1

memory-leaks ×1

mvvm ×1

wpf ×1