小编Bla*_*pel的帖子

获取WPF绑定的值

好吧,我不想在我的MVVM ViewModels中使用一堆ICommands,所以我决定为WPF创建一个MarkupExtension,它为它提供一个字符串(方法的名称),它会返回一个执行该方法的ICommand.

这是一个片段:

public class MethodCall : MarkupExtension
{
    public MethodCall(string methodName)
    {
        MethodName = methodName;
        CanExecute = "Can" + methodName;
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        Binding bin = new Binding { Converter = new MethodConverter(MethodName, CanExecute) };

        return bin.ProvideValue(serviceProvider);
    }
}

public class MethodConverter : IValueConverter
{
    string MethodName;
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        //Convert to ICommand
        ICommand cmd = ConvertToICommand();
        if (cmd == null)
            Debug.WriteLine(string.Format("Could not bind to method 'MyMethod' …
Run Code Online (Sandbox Code Playgroud)

c# data-binding wpf mvvm markup-extensions

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

过滤 ICollectionView<object> 时性能下降

在使用 MVVM 的 WPF 应用程序中,我查询数据库以获取客户端的 ObservableCollection,创建 ICollectionView 并应用过滤器函数。

在我的用户控件上,我将用于过滤器的文本绑定到一个文本框,将 ICollectionView 绑定到一个列表框。

ICollectionView 最初包含 1104 个客户端(只有 ClientID 和 ClientName)。

从数据库中检索数据非常快。但是,列表框需要大约 4 秒才能填充。

当我在过滤器中输入文本时,如果要返回的客户端数量很少,那么列表框会相对较快地重绘。但是,如果我清除了文本框,那么重新绘制还需要 4 秒。

我是不是遗漏了什么,或者我的代码写得不是很好。

感谢您的任何建议/帮助。

看法:

<UserControl x:Class="ClientReports.Module.SchemeSelection.Views.Clients"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:ClientReports.Module.SchemeSelection.Views"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300"
             xmlns:prism="http://prismlibrary.com/"
             prism:ViewModelLocator.AutoWireViewModel="True" >
    <Grid>
        <StackPanel>
            <TextBox  materialDesign:HintAssist.Hint="Client Search"
                      Style="{StaticResource MaterialDesignFloatingHintTextBox}"
                      Text="{Binding Search, UpdateSourceTrigger=PropertyChanged}"/>
            <ListBox ItemsSource="{Binding ClientsFiltered}" DisplayMemberPath="ClientName" />
        </StackPanel>
    </Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

视图模型:

using ClientReports.Common.Infrastructure.Models;
using ClientReports.Common.Infrastructure.Services;
using Prism.Mvvm;
using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Threading.Tasks;
using System.Windows.Data;

namespace ClientReports.Module.SchemeSelection.ViewModels
{
    public …
Run Code Online (Sandbox Code Playgroud)

c# data-binding wpf performance mvvm

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

如何以编程方式在OpenSSL中创建自签名证书(即,不使用'openssl'CLI命令)?

我的程序使用OpenSSL,需要根据需要创建自签名证书.它运行的系统无法访问'openssl'CLI命令,因此我无法使用它.相反,我需要通过使用OpenSSL X509 API来实现这一点.

请注意,我不需要创建证书FILE,只需要创建证书; OpenSSL称之为"X509"结构.

我找不到有关如何执行此操作的任何文档.

我怎样才能做到这一点?

谢谢.

c openssl certificate

4
推荐指数
1
解决办法
7861
查看次数

从自定义printf函数返回一个const char*

我写了一个自定义打印功能.我的问题是我需要返回一个,const char*因为这必须在另一个函数中使用.我根本不知道如何管理......

anotherFunction (const char* text /*Here*/, unsigned __int32 value, unsigned __int64 bigVal);

我知道以下示例/ s不能正常工作.这就是我到目前为止所尝试过的.

const char* CatchMessage (const char *message, ...)
{
    va_list  args;
    va_start (args, message);
    /*?*/
    va_end   (args);
    return message;
}
Run Code Online (Sandbox Code Playgroud)

我只是设法在cmd中获得正确的输出,但实际上我需要它作为返回值.

void CatchMessage (const char *message, ...)
{
    va_list  args;
    va_start (args, message);
    vfprintf (stdout, message, args);
    va_end   (args);
}
Run Code Online (Sandbox Code Playgroud)

呼叫:

CatchMessage ("Some Input %s and %d equals to %d", randString, randNumber, secRandNumber);
Run Code Online (Sandbox Code Playgroud)

应该返回:

"Some Input stuff and 12 equals to 6" …
Run Code Online (Sandbox Code Playgroud)

c c++ printf variadic-functions

4
推荐指数
2
解决办法
2157
查看次数

如何从“Binding”对象获取“BindingExpression”?

简而言之(?),我有一个ListView(目标)单向绑定到一个XmlDataProvider(源)双向绑定到一个TextBox(目标)使用标准 XAML 进行控件绑定和自定义 XAML 扩展用于绑定到XmlDataProvider. 这对应用程序来说很方便,因为在应用XmlDataProvider程序运行后从用户输入动态加载...

无论如何,在运行时,修改TextBox.Text属性后,IMultiValueConverter.ConvertBack(...)调用该方法将更新从该目标传播回源。但是,因为XmlDataProvider对象不是 a DependencyProperty,所以更新不会从更改的XmlDataProvider源进一步传播到ListView目标的另一个绑定。

如果没有重新架构(您可以合理地建议),我需要通知 WPFXmlDataProvider需要更新任何将此作为源的目标。我希望维护一个通用的、可重用的绑定类,并且到目前为止,我已经享受了我的主要 XAML 解决方案的低编码负担。

目前,我拥有的唯一访问背后的代码来自IMultiValueConverter.ConvertBack(...)方法内部。在此方法中,我确实可以访问<-->链接的Binding对象。如果我能得到的对象然后我可以打这个电话来完成更新传播,...XmlDataProviderTextBoxBindingExpressionBinding.SourceBindingExpression.UpdateTarget()

但是,我不知道如何BindingExpressionBinding.Source与 a 无关的对象中获取a DependencyProperty

在此先感谢您的建议和帮助。

c# data-binding wpf xaml binding

3
推荐指数
1
解决办法
1894
查看次数

枚举错误:'枚举':缺少标记名称

我正在尝试编译一个在以下行中显示错误的应用程序:

enum class HoleMaskPixelTypeEnum {HOLE, VALID, UNDETERMINED};
Run Code Online (Sandbox Code Playgroud)

我没有使用枚举是这样的方式与class关键字.如果我评论关键字类,则会发生以下错误

error C2864: 'HolePixelValueWrapper<T>::Value' : only static const integral data members can be initialized within a class
Run Code Online (Sandbox Code Playgroud)

这是以下代码:

 template <typename T>
struct HolePixelValueWrapper
{
  HolePixelValueWrapper(const T value) : Value(value){}

  operator T()
  {
    return this->Value;
  }

  T Value = 0;//error here.
};
Run Code Online (Sandbox Code Playgroud)

不知道解决它.

c++ enums class c++11

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

提升回声服务器示例并在 lambda 中捕获 this 和 shared_from_this()

在 boost async-tcp-echo-server示例中,有一个服务器类可以在新连接上创建会话:

acceptor.async_accept(socket, [this](boost::system::error_code ec) {
    if (!ec)
        std::make_shared<session>(std::move(socket))->start();
    do_accept();
});
Run Code Online (Sandbox Code Playgroud)

session::start() 函数体:

void start() { do_read(); }
Run Code Online (Sandbox Code Playgroud)

session::do_read 方法是一个私有成员函数:

void do_read()
{
    auto self(shared_from_this());
    socket.async_read_some(boost::asio::buffer(data, sizeof(data)),
        [this, self](boost::system::error_code ec, std::size_t length) {
            if (!ec)
                do_write(length);
    });
}
Run Code Online (Sandbox Code Playgroud)

如果我错了,请纠正我。
会话类继承自,std::enable_shared_from_this因此在调用时已经创建了一个控制块,shared_from_this()并且不会发生未定义的行为。在do_read函数中,shared_from_this()函数用于允许do_write()对仍然存在于内存中的对象调用方法。如果shared_from_this()不使用该对象,则可以在到达范围结束时删除该对象。

为什么this在 lambda 表达式中被捕获?方法
do_write()调用this还是self

在 C++14 中,我可以替换:

auto self(shared_from_this());
socket.async_read_some(boost::asio::buffer(data, sizeof(data)),
    [this, self] ...
Run Code Online (Sandbox Code Playgroud)

和:

socket.async_read_some(boost::asio::buffer(data, sizeof(data)),
        [this, …
Run Code Online (Sandbox Code Playgroud)

c++ lambda boost boost-asio

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

为什么java不支持多重继承,尽管默认情况下所有java方法都是虚拟的?

为什么Java不支持多重继承,尽管默认情况下所有java方法都是虚拟的?为什么Java会出现钻石问题?

java diamond-problem

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

snprintf c ++替代方案

如何将此代码从C转换为C++?

char out[61]; //null terminator
for (i = 0; i < 20; i++) {
    snprintf(out+i*3, 4, "%02x ", obuf[i])
}
Run Code Online (Sandbox Code Playgroud)

我找不到任何替代方案snprintf.

c++ printf string-formatting c++11

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

赋值运算符作为复制构造函数

赋值运算符可用于将一个对象的值复制到另一个对象而不是使用复制构造函数,那么为什么我们需要复制构造函数呢?

class example  
{
    int data;
public:
    example()
    {
    }

    example(int x)
    {
        data = x;
    }
};

int main()
{
    example a(50);
    example a(b);
    //same can be done with the assignment operator
    //b = a;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++

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

boost ptr_vector与unique_ptr结合使用时出错

我正试图从我的代码中删除auto_ptr.但我得到这个错误,不知道为什么?

no matching function for call to 'boost::ptr_vector<a>::push_back(std::remove_reference<std::unique_ptr<a>&>::type)'
note: candidates are:
...
note: 'std::unique_ptr<a>' is not derived from 'std::auto_ptr<T>'

{
    boost::ptr_vector<a>& c;

    std::unique_ptr<a> b( new a(x, y) );

    if (!b->isValid())
        return;
    c.push_back(std::move(a));
}
Run Code Online (Sandbox Code Playgroud)

c++ boost c++11

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

如何在Common Lisp中将字符串转换为列表

Just like
Run Code Online (Sandbox Code Playgroud)

字符串是

> "((1 0)(0 1))" 
required  
>((1 0)(0 1))
Run Code Online (Sandbox Code Playgroud)

我也在使用实习函数,但它以((1 \ 0)(0 \ 1))的形式返回

lisp

-1
推荐指数
1
解决办法
793
查看次数