小编Ola*_*cea的帖子

在XAML中设置时,在代码中访问DataContext实例

我通常在代码隐藏中实例化我的ViewModel并将其设置为Window或UserControl的DataContext.

对于这个简单的ViewModel:

public class ViewModel
{
    public ObservableCollection<string> items { get; set; }

    public ViewModel()
    {
        items = new ObservableCollection<string>();
        items.Add("FirstItem");
        items.Add("SecondItem");
        items.Add("ThirdItem");
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在添加我的本地命名空间,以下语法将设置正确的事情:

<Window.DataContext>
    <local:ViewModel/>
</Window.DataContext>
Run Code Online (Sandbox Code Playgroud)

很好,我知道ViewModel对象被实例化并设置为窗口的DataContext,它按预期工作但有没有办法从代码中访问实例化的对象?

如果我在代码隐藏中创建对象

ViewModel vm = new VewModel();
this.DataContext = vm;
Run Code Online (Sandbox Code Playgroud)

我能够访问vm实例但是使用XAML方法,它是如何实现的?

我创建了这个小例子,以便找出是否有简单的答案.

c# wpf mvvm

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

锁定基本类型

我想检查一些锁定行为,我无法理解:

static void Main(string[] args)
{
    for (int i = 0; i < 10; i++)
    {
        Task.Factory.StartNew(() =>
        {
            MultithreadedMethod();
        });
    }

    Thread.Sleep(2000);
    Console.WriteLine(count);
}

static int count = 0;
private static readonly int sync = 5;

public static void MultithreadedMethod()
{
    if (Monitor.TryEnter(sync))
    {
        count++;
        Monitor.Exit(sync);
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为这应该不起作用,因为我正在对整数值进行同步.First Boxing,然后是Unboxing,我应该得到一个System.Threading.SynchronizationLockException,因为缺少同步块根(我知道这是特定于引用类型).我不会欺骗自己,即使这适用于几次迭代,它也不是真的同步..所以,考虑到增量操作的非原子属性..我不会得到确定性的结果..我知道这个.

事实上,当我摆脱Thead.Sleep并对任务进行等待时......异常就会到位.

Task.Factory.StartNew(() =>
 {
       MultithreadedMethod();
 }).Wait();
Run Code Online (Sandbox Code Playgroud)

我认为应该抛出异常: Monitor.Exit(sync)

有什么能吸引它的?

更新1:pic添加.

在此输入图像描述

c# multithreading

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

同步SmtpClient发送,不会命中SendCompleted处理程序

 SmtpClient client = new SmtpClient("my.server.com");
Run Code Online (Sandbox Code Playgroud)

我像往常一样创建客户端并发送电子邮件.一切正常,电子邮件正确地到达框中.

我还想在SendCompleted事件处理程序中的代码中做一些工作.

  client.SendCompleted += client_SendCompleted;
Run Code Online (Sandbox Code Playgroud)

我没有async选项就开始工作了,

client.Send(message);
Run Code Online (Sandbox Code Playgroud)

但这样,我的处理程序代码永远不会被击中.

如果我选择client.SendAsync(),事件处理程序将被执行,但我必须做一些同步才能使它正确,也许有一个更简单的方法来实现它.

所以我的问题是,当我使用send而不是异步时,没有点击处理程序是正常的吗?

c#

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

在我的c#示例中解释JSON结构

我有这种json结构:

      {
       "Root": {
           "data": [
               {
                   "CardName": "card1",
                   "functions": [
                       {
                           "State": "OPEN",
               "State": "INHERENT"
                       }
                   ]
               },
               {
                   "CardName": "card2",
                   "functions": [
                       {
                           "State": "CLOSED",
               "State": "INHERENT"
                       }
                   ]
               }
           ]
       }
   }
Run Code Online (Sandbox Code Playgroud)

我的C#课程是:

    [DataContract]
public class Card
{
    [DataMember(Name = "CardName")]
    public string CardName { get; set; }

    [DataMember(Name = "functions")]
    public List<Function> Functions { get; set; }
}

[DataContract]
public class Function
{

    [DataMember(Name = "State")]
    public string State { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想解析该结构以获得卡片列表,并且每张卡片包含一系列功能.

此刻我正在尝试这个: …

c# json

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

c ++到c#for语句

unsigned long uds_calc_key(unsigned long seed)
{
    unsigned long temp;
    unsigned short int  index;
    unsigned short int  mult1;
    unsigned short int  mult2;

    if(seed == 0)
    {
        seed = NC_DEFAULT_SEED;
    }
    else
    {}

    for (index=0x5D39, temp=0x80000000; temp; temp>>=1)
    {
        if (temp & seed)
        {
            index = croshortright(index, 1);
            if (temp & NC_UDS_KEYMASK)
            {
                index ^= 0x74c9;
            }
        }
    }

    mult1 = (nc_uds_keymul[(index>>2) & ((1<<5)-1)]^index);
    mult2 = (nc_uds_keymul[(index>>8) & ((1<<5)-1)]^index);
    temp = (((unsigned long)mult1)<<16)|((unsigned long)mult2);
    temp = mulu32(seed,temp);
    return temp;
}
Run Code Online (Sandbox Code Playgroud)

我不明白如何在for语句中转换该临时值.我将临时值定义为uint …

c# c++

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

意外的查询行为

我正在尝试执行以下代码:

static void ProjTableQuery(Args _args)
{
   Query query;
   QueryBuildDataSource qbds1;
   QueryBuildDataSource qbds2;
   QueryBuildRange qbr1;
   QueryBuildRange qbr2;
   QueryRun queryRun;
   ProjTable projTable;

   query = new Query();

   qbds1 = query.addDataSource(tableNum(ProjTable));
   qbds1.addSortField(
       fieldNum(ProjTable, Name),
       SortOrder::Ascending);

   //qbr1 = qbds1.addRange(fieldNum(ProjTable, Type));
   //qbr1.value(queryValue(ProjType::FixedPrice));

   qbr2 = qbds1.addRange(fieldNum(ProjTable, ProjId));
   qbr2.value(queryValue('0') + '*');

   qbds2 = qbds1.addDataSource(tableNum(ProjEmplTrans));
   qbds2.relations(true);
   qbds2.joinMode(JoinMode::InnerJoin);

   queryRun = new QueryRun(query);

   while (queryRun.next())
   {
       projTable = queryRun.get(tableNum(ProjTable));
       info(strFmt("%1 %2 %3", projTable.ProjId, projTable.Name, projTable.Type));
   }
}
Run Code Online (Sandbox Code Playgroud)

注释掉的那两行可以正常工作.但是,如果我取消注释它们,它将不再运行,并且不会显示任何错误消息.

就我所见,ProjType是一个枚举,我确信我在SQL中检查了FixedPrice值.

x++ axapta dynamics-ax-2012 dynamics-ax-2012-r3

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

动态添加网格列

我创建了一个包含单个数据源的表单:InventJournalTable.

我还在其上添加了一个网格和数据源中的两个字段:JournalTypeJournalId

ActionPane有一个按钮,并在其点击的事件处理程序,我试图做到以下几点:

1.  add a new data source and join it with the current one on JournalId
2.  add to fields from the newly added data source to the current Grid. 
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的...仅用于测试..我试图访问数据源并添加范围.它工作得很好,也许连接也在工作,但我怎么能添加这两个字段?

void clicked()
{
    Query query;
    QueryBuildDataSource qbdsInventJournalTable;
    QueryBuildDataSource qbdsvwInventJournals;

    super();

    query = InventJournalTable_ds.query();
    qbdsInventJournalTable = query.dataSourceTable(tableNum(InventJournalTable));

    qbdsInventJournalTable.addRange(fieldNum(InventJournalTable, JournalType)).value(queryValue(InventJournalType::LossProfit));

    qbdsvwInventJournals = qbdsInventJournalTable.addDataSource(tableNum(vwInventAdjJrnlCostAmount));
    qbdsvwInventJournals.addLink(fieldNum(InventJournalTable, JournalId), fieldNum(vwInventAdjJrnlCostAmount, JournalId));
    qbdsvwInventJournals.joinMode(JoinMode::OuterJoin);

    //gridOverview.addDataField(

    InventJournalTable_ds.executeQuery();
}
Run Code Online (Sandbox Code Playgroud)

还有一件事,我计划添加另一个名为"删除详细信息"的按钮,它将删除第二个数据源,并且网格应该返回其初始状态.

我至少在正确的轨道上吗?我可以得到一些关于此的提示吗?

microsoft-dynamics x++ axapta dynamics-ax-2012 dynamics-ax-2012-r3

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