RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-222188

trydex's questions

Martin Hope
trydex
Asked: 2020-05-16 21:22:29 +0000 UTC

有效 JSON 未反序列化为操作参数

  • 2

服务器有一个控制器,它具有以下方法:

[HttpPost]
public bool Register([FromBody]SalesPoint salesPoint)
{
   ...
}

SalesPoint是这样描述的:

public class SalesPoint
{   
    public string Name { get; set; }
    public Dictionary<TerminalType, List<Terminal>> Terminals { get; set; } = new Dictionary<TerminalType, List<Terminal>>();
}

public enum TerminalType
{
    Type1 = 1,
    Type2 = 2
}

public class Terminal
{
    public TerminalType Type { get; set; }
    public string Code { get; set; }   

}

客户端形成正确的 JSON 并将其发送到服务器,但参数salesPoint为 null。

通过 PostMan 进行测试时,该方法不接受此类 JSON(正确):

{
    "Name": "Test",
    "Terminals": [{
        "Key": 1,
        "Value": [{
            "Type": 1,
            "Code": "78-343002"
        }]
    }]
} 

但是如果你扔掉字典的 JSON 并像这样发送它:

{
    "Name": "Test"
}

然后它正常反序列化。问题是什么?

c#
  • 1 个回答
  • 10 Views
Martin Hope
trydex
Asked: 2020-12-26 18:43:45 +0000 UTC

如何用无限循环杀死线程并处理 ThreadAbortException

  • 6

有没有办法杀死正在运行此方法的线程?

public static void M()
{
    while (true)
    {
        try
        {

        }
        catch (ThreadAbortException)
        {
            Thread.ResetAbort();
        }
    }
}
c#
  • 2 个回答
  • 10 Views
Martin Hope
trydex
Asked: 2020-12-11 01:48:28 +0000 UTC

如何从 Roslyn 的入口点执行代码

  • 3

需要做的是允许用户在我的服务器上执行 C# 代码(类似于dotnetfiddle.net)。Asp.net 核心应用程序。

有一种方法效果很好:

public static async Task<ScriptState<object>> ExecuteScriptAsync(string code, IEnumerable<Assembly> references,
    IEnumerable<string> usings)
{
    var options = ScriptOptions.Default.WithReferences(references).WithImports(usings);

    return await CSharpScript.RunAsync(code, options);
}

该方法的问题ExecuteScript是它将不再执行这样的代码:

class Program 
{
    public static void Main() 
    {
        throw new System.Exception();   
    }
}

如何使代码像在控制台应用程序中一样运行,即 方法Main是切入点?


更新

找到了这段代码。它可以工作,但是如果您添加到脚本中,它会因错误“当前上下文中不存在Console.WriteLine("hi")该名称”而中断。Console

var script = @"using System;
                public static class Program
                {
                    public static int Main(string[] args)
                    {
                        var x = 7 * 8;
                        return x;
                    }
                }";

var assemblyPath = Path.GetDirectoryName(typeof(object).Assembly.Location);
var refs = new List<PortableExecutableReference>
{
    MetadataReference.CreateFromFile(typeof(object).Assembly.Location),
    MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "mscorlib.dll")),
    MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "System.dll")),
    MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "System.Core.dll")),
    MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "System.Runtime.dll")),
    MetadataReference.CreateFromFile(Assembly.GetEntryAssembly().Location)
};

// Parse the script to a SyntaxTree
var syntaxTree = CSharpSyntaxTree.ParseText(script);
var options = new CSharpCompilationOptions(OutputKind.ConsoleApplication);
// Compile the SyntaxTree to a CSharpCompilation
var compilation = CSharpCompilation.Create("Script",
    new[] { syntaxTree },
    refs,
    new CSharpCompilationOptions(
        OutputKind.ConsoleApplication,
        optimizationLevel: OptimizationLevel.Release,
        assemblyIdentityComparer: DesktopAssemblyIdentityComparer.Default));

//CodeDomProvider codeDomProvider = new CodeDomProvider();
using (var outputStream = new MemoryStream())
using (var pdbStream = new MemoryStream())
{
    // Emit assembly to streams.
    var result = compilation.Emit(outputStream, pdbStream);
    if (!result.Success)
    {
        return;
    }

    // Load the emitted assembly.
    var assembly = Assembly.Load(outputStream.ToArray(), pdbStream.ToArray());

    // Invoke the entry point.
    var x = assembly.EntryPoint.Invoke(null, null);
c#
  • 1 个回答
  • 10 Views
Martin Hope
trydex
Asked: 2020-04-14 10:16:51 +0000 UTC

在 Visual Studio 项目模板中复制设置文件

  • 4

我正在制作一个 VS 项目模板,并且我希望我正在创建的项目包含外部程序的设置和启动参数。设置文件应该简单地复制到项目目录中。

VS 设置本身存储在$projectname$.csproj.user项目文件 (.csproj) 中没有引用的文件中。

问题来了:VS不会复制项目文件中不涉及的文件。$projectname$.csproj应该写入这样的内容,以便文件毕竟被复制<None Include="$projectname$.csproj.user" />。$projectname$.csproj.user但随后它会出现,Solution Explorer并且只有在重新打开解决方案后才会从中读取设置。

项目.vs模板:

<TemplateContent>
    <Project File="ProjectTemplate.csproj" ReplaceParameters="true">
      <ProjectItem ReplaceParameters="true" TargetFileName="Properties\AssemblyInfo.cs">AssemblyInfo.cs</ProjectItem>
      <ProjectItem ReplaceParameters="true" TargetFileName="$projectname$.csproj.user">ProjectTemplate.csproj.user</ProjectItem>
    </Project>
</TemplateContent>

如何解决这个问题?

c#
  • 1 个回答
  • 10 Views
Martin Hope
trydex
Asked: 2020-04-01 21:28:40 +0000 UTC

参数不传递给方法

  • 1

有这样一个控制器:

[Area("api")]
[Route("[area]/[controller]")]
public class ProgramsController : Controller
{       
    [HttpGet("[action]")]
    public async Task<IActionResult> Turn(int id, int state)
    {
        await Task.Delay(1000);
        return Content("It works!");
    }
}

我希望该方法Turn处理以下请求:

http://localhost/api/programs/turn?id=1&state=2

但是当这样的请求被执行时,参数id并state没有被设置,尽管它们包含在Request.Query值中。

问题是什么?


启动.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseBrowserLink();
    }

    app.UseStaticFiles();
    app.UseMvc(routes =>
    {
        routes.MapRoute( "areas", "{area:exists}/{controller}/{action}");
        routes.MapRoute("default", "{controller=Programms}/{Action=Index}");
    });
}  
c#
  • 2 个回答
  • 10 Views
Martin Hope
trydex
Asked: 2020-12-25 03:48:53 +0000 UTC

隐藏表格列和复选框

  • 1

我通过复选框隐藏表格列。JS 代码取自这里。

问题如下。列被隐藏,但复选框未标记为选中。如果您从代码中删除e.preventDefault();,则所有内容都与复选框一致,但列不会隐藏。单击复选框时,没有添加任何类,所以我不明白该怎么做。

如何解决?

    var table = $('#accounts').dataTable();

    $('label.toggle-vis').on('click', function (e) {
        e.preventDefault();
       // Get the column API object
        var column = table.api().column($(this).attr('data-column'));
        // Toggle the visibility
        column.visible(!column.visible());
    });
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js"></script>
<script src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>

<label class="custom-control custom-checkbox toggle-vis" data-column="0">
    <input type="checkbox" class="custom-control-input">
    <span class="custom-control-indicator"></span>
    <span class="custom-control-description">Id</span>
</label>

<label class="custom-control custom-checkbox toggle-vis" data-column="1">
    <input type="checkbox" class="custom-control-input">
    <span class="custom-control-indicator"></span>
    <span class="custom-control-description">Name</span>
</label>

<table id="accounts" class="table">
  <thead>
    <tr>
        <th>Id</th>
        <th>Name</th>
     </tr>
   </thead>
      <tbody>
        <tr>
          <td>1</td><td>Jack</td>
        </tr>
        <tr>
          <td>2</td><td>Peter</td>
        </tr>
      </tbody>
    </table>

javascript
  • 1 个回答
  • 10 Views
Martin Hope
trydex
Asked: 2020-12-02 02:44:22 +0000 UTC

无法打开登录请求的数据库

  • 0

我正在从 Adam Freeman 的书中学习 ASP.Net Core MVC。

我尝试运行此示例,但出现以下错误:

无法打开登录请求的数据库“SportsStore”。登录失败。用户“DESKTOP-TS09MR6\AdminX”登录失败。

ConnectionString看起来像这样Server=(localdb)\\MSSQLLocalDB;Database=SportsStore;Trusted_Connection=True;MultipleActiveResultSets=true

可能是什么问题呢?

堆栈跟踪:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Data.SqlClient.SqlException: Cannot open database "SportsStore" requested by the login. The login failed.
Login failed for user 'DESKTOP-TS09MR6\AdminX'.
   at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, Boolean applyTransientFaultHandling)
   at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
   at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
   at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
   at System.Data.SqlClient.SqlConnection.Open()
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open()
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable.Enumerator.MoveNext()
   at Microsoft.EntityFrameworkCore.Query.QueryMethodProvider.GetResult[TResult](IEnumerable`1 valueBuffers)
   at lambda_method(Closure , QueryContext )
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass20_0`1.b__0(QueryContext qc)
   at System.Linq.Queryable.Any[TSource](IQueryable`1 source)
   at SportsStore.Models.SeedData.EnsurePopulated(IApplicationBuilder app) in F:\Рабочий стол\pro-asp.net-core-mvc-master\Source Code 1-31\08 - SportsStore\SportsStore\src\SportsStore\Models\SeedData.cs:line 12
   at SportsStore.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) in F:\Рабочий стол\pro-asp.net-core-mvc-master\Source Code 1-31\08 - SportsStore\SportsStore\src\SportsStore\Startup.cs:line 43
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at Microsoft.AspNetCore.Hosting.Internal.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder)
   at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
c#
  • 2 个回答
  • 10 Views
Martin Hope
trydex
Asked: 2020-11-04 20:49:45 +0000 UTC

通过 XPath 查找元素并单击

  • 0

您需要通过 XPath 在页面上找到一个元素并单击它。

找到这个功能:

function getElementByXpath(path) {
            return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;            
        }

但是执行这个函数的结果将是一个Node没有方法的类型click。

是否可以以某种方式将类型Node转换为类型HtmlElement以便可以与元素进行交互?

javascript
  • 1 个回答
  • 10 Views
Martin Hope
trydex
Asked: 2020-08-26 11:43:27 +0000 UTC

编辑选定对象的属性

  • 7

该程序能够编辑所选对象的属性。

这是通过ViewModel 上的SelectedObject属性实现的。

问题如下。如果我选择一个对象,编辑它的属性并在 current 中单击TabItem,那么属性就会更新。但是,如果我编辑属性并且没有从文本字段中移除光标,而是切换到另一个选项卡,则不会保存属性中的更改。

安装UpdateSourceTrigger=PropertyChanged对我不起作用。正好需要LostFocus。

如何解决?


我画了一个反映问题的例子。

在此处输入图像描述

代码隐藏:

public class PersonVm : BaseVm
{
    private string _name;
    private string _lastname;

    public string Name
    {
        get => _name;
        set
        {
            _name = value;
            OnPropertyChanged();
        }
    }

    public string Lastname
    {
        get => _lastname;
        set
        {
            _lastname = value;
            OnPropertyChanged();
        }
    }
}


public class MainVm : BaseVm
{
    private PersonVm _selectedPerson;

    public MainVm()
    {
        Class1.Add(new PersonVm { Name = "Алексей", Lastname = "Алексеев" });
        Class1.Add(new PersonVm { Name = "Иван", Lastname = "Иванов" });

        Class2.Add(new PersonVm { Name = "Петр ", Lastname = "Петров" });
        Class2.Add(new PersonVm { Name = "Николай", Lastname = "Николаев" });
    }
    public ObservableCollection<PersonVm> Class1 { get; } = new ObservableCollection<PersonVm>();
    public ObservableCollection<PersonVm> Class2 { get; } = new ObservableCollection<PersonVm>();

    public PersonVm SelectedPerson
    {
        get => _selectedPerson;
        set
        {
            _selectedPerson = value; 
            OnPropertyChanged();
        }
    }
}

XAML:

<Window.Resources>
    <DataTemplate x:Key="DataTemplate">
        <ListBox ItemsSource="{Binding}"
                 SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.SelectedPerson}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Name}" />
                        <TextBlock Text="{Binding Lastname}" 
                                   Margin="5,0,0,0"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
            </ListBox>
    </DataTemplate>
</Window.Resources>

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*"/>
        <ColumnDefinition />
    </Grid.ColumnDefinitions>

    <TabControl>
        <TabItem Header="Class1" 
                 Content="{Binding Class1}"
                 ContentTemplate="{StaticResource DataTemplate}" />

        <TabItem Header="Class2" 
                 Content="{Binding Class2}"
                 ContentTemplate="{StaticResource DataTemplate}" />
    </TabControl>

    <StackPanel Grid.Column="1">
        <TextBlock Text="Имя" />
        <TextBox Text="{Binding SelectedPerson.Name}" />
        <TextBlock Text="Фамилия" />
        <TextBox Text="{Binding SelectedPerson.Lastname}" />
    </StackPanel>
</Grid>
c#
  • 1 个回答
  • 10 Views
Martin Hope
trydex
Asked: 2020-08-13 04:03:54 +0000 UTC

ViewModel 属性的撤消/重做实现

  • 6

有一个类PersonVm表示一个人的信息:

public class PersonVm : BaseViewModel
{
    private string _name;
    public string Name
    {
      get {return _name; }
      set 
      {   
          _name = value;
          RaisePropertyChanged();
      }
    }
}

该类PersonManager是人员的集合,允许您添加/删除人员,以及通过以下方式回滚这些更改UndoRedoService:

public class PersonManager  : BaseViewModel
{
    public ObservableCollection<Person> Persons {get;set;}
    public UndoRedoService UndoRedoService {get;set;} = new UndoRedoService();
}

我还想回滚PersonVm. 可以PropertyChanged为所有人订阅事件并接收发生更改的属性的名称、当前值和新值。

但是在这种情况下,有必要通过反射回滚更改 - 按名称搜索所需的属性并进行更改。这不是一个非常快速的方法。

有可能做一些不同的事情吗?

c#
  • 2 个回答
  • 10 Views
Martin Hope
trydex
Asked: 2020-08-05 18:52:57 +0000 UTC

在扩展器中滚动

  • 3

有几个Expander,其中一个应该有滚动内容。

问题是滚动仅在您不对行大小进行硬编码时才有效,但如果您指定Height=Auto,滚动将拒绝工作。

同时,如果不将行大小指定为Auto,则将其Expander拉伸到剩余空间。

如何找到妥协?

在此处输入图像描述

XAML:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition />
    </Grid.RowDefinitions>

    <Expander Grid.Row="0"
        Background="LightBlue" Header="1" Margin="10"/>
    <Expander Grid.Row="1"
        Background="LightBlue" Header="2" Margin="10">
        <ScrollViewer>

        </ScrollViewer>
    </Expander>
</Grid>
c#
  • 1 个回答
  • 10 Views
Martin Hope
trydex
Asked: 2020-07-23 22:58:56 +0000 UTC

在 TabControl 中更改活动选项卡时重置 DataTemplate 中的属性

  • 5

该程序使用TabControl并且它的每个选项卡都由一个带有表格的用户控件表示DataGrid。

当活动选项卡改变时,ItemsSource每次都重新设置该属性,导致滚动条和表格中所有选中的行都丢失之前的状态,每次加载都需要等待一段时间数据。

代码没有任何变化。

问题是什么?

主窗口:

<TabControl ItemsSource="{Binding Tabs}">
    <TabControl.ItemContainerStyle>
        <Style TargetType="{x:Type TabItem}">
            <Setter Property="Header" Value="{Binding Title}" />
            <Setter Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <wpfTemp:MyDataGrid ItemsSource="{Binding Items}" />
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </TabControl.ItemContainerStyle>
</TabControl>

用户控制:

<DataGrid ItemsSource="{Binding ItemsSource, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"
          SelectionMode="Extended"
          AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Number" Binding="{Binding}" />
    </DataGrid.Columns>
</DataGrid>
c#
  • 3 个回答
  • 10 Views
Martin Hope
trydex
Asked: 2020-07-04 09:53:47 +0000 UTC

热键和用户控件

  • 0

有UserControl,除其他外,有DataGrid。

您需要从外部绑定命令,Enter如下所示:

 <myControls:ProductsDataGrid.InputBindings>
    <KeyBinding Key="Enter"
                Command="{Binding OpenProductCommand}"
                CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type myControls:ProductsDataGrid}}, Path=SelectedItem}" />
</myControls:ProductsDataGrid.InputBindings>

问题是它以自己的方式DataGrid处理点击,只是将选择从当前行转移到下一行。Enter

如果您更改密钥,那么一切都会正常运行。

如何实现期望的行为?


如果您DataGrid以这种方式绑定热键,则一切正常,但解决方案不可靠。

<DataGrid.InputBindings>
    <KeyBinding Key="Enter"
                Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:ProductsDataGrid}}, Path=InputBindings[0].Command}"
                CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:ProductsDataGrid}}, Path=InputBindings[0].CommandParameter}" />         
</DataGrid.InputBindings>
c#
  • 2 个回答
  • 10 Views
Martin Hope
trydex
Asked: 2020-07-03 07:23:16 +0000 UTC

序列化集合属性

  • 5

有这样一个类:

public class ChapterCollection : ObservableCollection<ChapterVM>
{
    public bool? IsSelectedAll
    {
        get { return _isSelectedAll; }
        set
        {                
            _isSelectedAll = value;                
            OnPropertyChanged(new PropertyChangedEventArgs(nameof(IsSelectedAll)));
        }
    }
} 

当它被序列化为 XML 时,该属性IsSelectedAll不会被序列化。只有对象的集合ChapterVM。

如何序列化一个属性?


序列化是这样的:

public static void SerializeToXml(string path, object saveObject)
{
    var formatter = new XmlSerializer(saveObject.GetType());
    using (FileStream fs = new FileStream(path, FileMode.Create))
    {
        formatter.Serialize(fs, saveObject);
    }
}
c#
  • 1 个回答
  • 10 Views
Martin Hope
trydex
Asked: 2020-06-30 00:29:27 +0000 UTC

异步属性

  • 3

该程序将数据从数据库逐页输出到DataGrid.

当前页码更改时,数据以块的形式异步加载。

现在它是以这样一种方式完成的,即在 setterCurrentPage中调用LoadProducts,但是因为 不能写await,则方法同步执行。

应该实施哪一项?

public int CurrentPage
{
    get { return _currentPage; }
    set
    {
        _currentPage = value;
        LoadProducts();
        OnPropertyChanged();
    }
}

async void LoadProducts()
{
  // Получение данных из БД
}
c#
  • 1 个回答
  • 10 Views
Martin Hope
trydex
Asked: 2020-06-25 20:41:34 +0000 UTC

在 MVVM 子窗口中处理数据

  • 2

需要通过对话框实现添加商品到分类。

在此处输入图像描述

我做了一个这样的窗口:

XAML:

<Window.Resources>
    <HierarchicalDataTemplate x:Key="CategoryTemplate"
                              ItemsSource="{Binding Path=ChildCategories}">
        <CheckBox Content="{Binding Title}" 
                  Checked="CheckBox_Checked"
                  Unchecked="CheckBox_Unchecked" />

    </HierarchicalDataTemplate>
</Window.Resources>

<TreeView ItemsSource="{Binding Categories}"
          ItemTemplate="{StaticResource CategoryTemplate}" />

代码隐藏:

public partial class AddToCategoryWindow : Window
{
    public List<CategoryVM> SelectedCategories { get; }
    public AddToCategoryWindow()
    {
        InitializeComponent();
        SelectedCategories = new List<CategoryVM>();
    }

    private void CheckBox_Checked(object sender, RoutedEventArgs e)
    {
        var categoryVm = (sender as CheckBox).DataContext as CategoryVM;
        SelectedCategories.Add(categoryVm);
    }

    private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
    {
        var categoryVm = (sender as CheckBox).DataContext as CategoryVM;
        SelectedCategories.Remove(categoryVm);
    }
}

然后我从 VM 调用此窗口并从属性中获取选定的类别SelectedCategories:

private void AddToCategory()
{
    var addToCategoryDialog = new AddToCategoryWindow() {DataContext = this};
    if (addToCategoryDialog.ShowDialog() == true)
    {
        // Тут идет обработка продуктов
    }
}

不确定这种方法是否正确。

告诉我如何在 MVVM 中做这些事情?

c#
  • 1 个回答
  • 10 Views
Martin Hope
trydex
Asked: 2020-05-20 23:29:31 +0000 UTC

如何将 lambda 放入 List<Task>

  • 3

有一个任务列表List<Task>。

我不知道如何正确地将 lambda 放入其中。因此,由于我现在计算不正确,控制台上只显示“一个”;

为什么第二个任务不起作用?

static void Main()
{
    var tasks = new List<Task>();
    tasks.Add(TestMethod("one"));
    tasks.Add(new Task(async () => await TestMethod("two")));
    Task.WhenAll(tasks);

    Console.ReadKey();
}

private static async Task TestMethod(string msg)
{
    Console.WriteLine(msg);
}
c#
  • 1 个回答
  • 10 Views
Martin Hope
trydex
Asked: 2020-04-23 02:55:40 +0000 UTC

命令热键

  • 4

该程序使用TabControl.

在其中一个选项卡上,用户可以创建一个新项目。

您需要为项目创建命令绑定热键CTRL+ N。

谷歌建议以这种方式设置热键:

<Window.InputBindings>
    <KeyBinding Modifiers="Control" Key="N" 
                Command="{Binding CreateProjectCommand}" />
</Window.InputBindings>     

但要注意的是,当用户在设置选项卡中时,您不需要CTRL+即可N工作。

是否可以为每个选项卡指定自定义热键?

c#
  • 1 个回答
  • 10 Views
Martin Hope
trydex
Asked: 2020-04-19 23:34:02 +0000 UTC

在 VM 外部读取 VM 属性

  • 3

有一个类Action代表某种动作。此操作还可以包含一组嵌套操作ChildAction。

public class Action
{
    public Action Parent {get;set;}
    public ObservableCollection<Action> ChildActions {get;set;}
}

该类ProjectVM是动作的集合Action:

public class ProjectVM : BaseVM
{
    public ObservableCollection<Action> Actions {get;set;}
}

BMainVM有一个存储活动项目的属性:

public class MainVM : BaseVM
{
    public ProjectVM SelectedProject{get;set;}
}

在界面部分ProjectVM中,呈现TreeView了其元素的集合,Actions这些元素可以相互拖动和嵌套。

拖放是使用GongSolutions.Wpf.DragDrop 实现的。

我需要知道哪个元素被移动到哪里以形成每个ProjectVM.

Drag&Drop但是如何挂接到SelectedProjectMVVM 中的处理程序,这些处理程序在整个生态系统之外,并且只是使用附加属性挂接到控件?

<TreeView dd:DragDrop.UseDefaultDragAdorner="True"
          dd:DragDrop.IsDragSource="True"
          dd:DragDrop.IsDropTarget="True"
          dd:DragDrop.DropHandler="{Binding ElementName=UserControl, Path=DropHandler}"
          ItemsSource="{Binding Actions}" />



public class DropHandler : IDropTarget
{
    //...
    public void Drop(IDropInfo dropInfo)
    {
        //Здесь нужно взаимодействие с SelectedProject
    }
}

当然,您可以将属性SelectedProject设为静态,但有些东西告诉我这是错误的。

也许这是错误的方法?

c#
  • 1 个回答
  • 10 Views
Martin Hope
trydex
Asked: 2020-04-14 14:32:28 +0000 UTC

跟踪对象属性的变化

  • 3

有一个视图的集合ObservableCollection<BaseClass> Project {get;set;}。

任务如下:

如果对象的某些属性发生了变化,那么您需要通知用户项目已经发生变化并且需要保存。

除了如何在基类中实现之外,我没有想出任何其他方法INotifyPropertyChanged,但是有很多类,OnPropertyChanged将每个属性扩展为带有字段的属性是相当沉闷的。

有什么简洁的选择吗?

c#
  • 2 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5