Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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# 过滤内部机制_C#_Wpf - Fatal编程技术网

C# 过滤内部机制

C# 过滤内部机制,c#,wpf,C#,Wpf,我有: <CheckBox Name="Filtering" Grid.Row="1" Grid.Column="1" Checked="AddFiltering" Unchecked="RemoveFiltering" Margin="8" Style="{StaticResource checkBoxStyle}">Show only bargains</CheckBox> 我已经展示了OnlyBargains方法: private void S

我有:

<CheckBox Name="Filtering" Grid.Row="1" Grid.Column="1" 
    Checked="AddFiltering" Unchecked="RemoveFiltering" 
    Margin="8" Style="{StaticResource checkBoxStyle}">Show only bargains</CheckBox>
我已经展示了OnlyBargains方法:

private void ShowOnlyBargainsFilter(object sender, FilterEventArgs e)
{
    AuctionItem product = e.Item as AuctionItem;
    if (product != null)
    {
        // Filter out products with price 25 or above
        if (product.CurrentPrice < 25)
        {
            e.Accepted = true;
        }
        else
        {
            e.Accepted = false;
        }
    }
}
private void ShowOnlyBargainsFilter(对象发送方,FilterEventArgs e)
{
拍卖项目产品=e.作为拍卖项目的项目;
如果(产品!=null)
{
//过滤掉价格为25或以上的产品
如果(产品当前价格<25)
{
e、 接受=正确;
}
其他的
{
e、 接受=错误;
}
}
}
我也有一个问题:——)

ShowOnlyBargainsFilter返回void。 它真正改变的是参数值,即:

e、 接受=正确

我猜这个变化会被发送回某个来电者? 它是如何工作的

谢谢大家!

C#是一个基于参考的系统。因此,通过引用更改obejct“e”。因此,作为参数给定的对象将直接更改

举个简单的例子:

namespace Streamtest
{
    class Program
    {
        static void Main(string[] args)
        {
            Test cTest = new Test();
            cTest.Name = "Hello!";

            Do(cTest);

            Console.WriteLine(cTest.Name);
            Console.ReadLine();
        }

        static void Do(Test Test)
        {
            Test.Name = Test.Name + " " + Test.Name;
        }
    }

    public class Test
    {
        public string Name
        {
            get;
            set;
        }
    }
}
C#是一个基于参考的系统。因此,通过引用更改obejct“e”。因此,作为参数给定的对象将直接更改

举个简单的例子:

namespace Streamtest
{
    class Program
    {
        static void Main(string[] args)
        {
            Test cTest = new Test();
            cTest.Name = "Hello!";

            Do(cTest);

            Console.WriteLine(cTest.Name);
            Console.ReadLine();
        }

        static void Do(Test Test)
        {
            Test.Name = Test.Name + " " + Test.Name;
        }
    }

    public class Test
    {
        public string Name
        {
            get;
            set;
        }
    }
}

很明显,您从中获得了代码,因此我将尝试解释这是如何工作的。请注意,如果您在
CollectionViewSource
上使用Reflector,代码可能会有所不同,因为这只是对他们正在做什么的粗略猜测

因此,由于.NET(C#)通过引用传递对象,因此在引发事件时,您将修改原始
CollectionViewSource
在事件中发送的相同对象。这意味着它可以在所有
EventHandler
s完成后读取状态。这意味着它可以有如下过滤代码:

private void ApplyFilter()
{
    List<object> acceptedItems = new List<object>();

    foreach (object o in this.innerCollection)
    {
        FilterEventArgs e = new FilterEventArgs(o);
        Filter(this, e); // raise the Filter event
        if (e.Accepted)
            acceptedItems.Add(o);
    }

    this.filteredItems = acceptedItems;
}
private void ApplyFilter()
{
List acceptedItems=新列表();
foreach(此.innerCollection中的对象o)
{
FilterEventArgs e=新的FilterEventArgs(o);
筛选器(this,e);//引发筛选器事件
如果(e.接受)
加入(o);
}
this.filteredItems=acceptedItems;
}

CollectionViewSource
引发
Filter
事件时,将调用使用该事件注册的任何事件处理程序。NET中的事件是一个概念,在上也有描述。该链接来自.NET的第一个版本,但仍然适用。如果您想了解更多信息,还可以查找多播委托,因为该事件是多播委托的特例。

您显然是从中获得代码的,因此我将尝试解释这是如何工作的。请注意,如果您在
CollectionViewSource
上使用Reflector,代码可能会有所不同,因为这只是对他们正在做什么的粗略猜测

因此,由于.NET(C#)通过引用传递对象,因此在引发事件时,您将修改原始
CollectionViewSource
在事件中发送的相同对象。这意味着它可以在所有
EventHandler
s完成后读取状态。这意味着它可以有如下过滤代码:

private void ApplyFilter()
{
    List<object> acceptedItems = new List<object>();

    foreach (object o in this.innerCollection)
    {
        FilterEventArgs e = new FilterEventArgs(o);
        Filter(this, e); // raise the Filter event
        if (e.Accepted)
            acceptedItems.Add(o);
    }

    this.filteredItems = acceptedItems;
}
private void ApplyFilter()
{
List acceptedItems=新列表();
foreach(此.innerCollection中的对象o)
{
FilterEventArgs e=新的FilterEventArgs(o);
筛选器(this,e);//引发筛选器事件
如果(e.接受)
加入(o);
}
this.filteredItems=acceptedItems;
}

CollectionViewSource
引发
Filter
事件时,将调用使用该事件注册的任何事件处理程序。NET中的事件是一个概念,在上也有描述。该链接来自.NET的第一个版本,但仍然适用。如果您想了解更多信息,还可以查找多播代理,因为该事件是多播代理的特例。

好的,我知道这里使用的是引用,但我不明白这里称之为“ShowOnlyBargainsFilter”的是什么。这里的问题是谁引用了eOk,我知道这里使用的是引用,但我不明白这里所谓的“ShowOnlyBargainsFilter”是什么。这里的问题是谁引用了e