我需要从Windows 8 WinRT/Metro应用程序知道我的实际本地IP地址(即不是环回地址).我需要这几个原因.最简单的是,在应用程序的UI中,我想显示一些文本,例如"您的本地网络IP地址是:[从代码查询的IP]".
我们还使用该地址进行一些额外的网络通信.这些通信是完全有效的,因为如果我查看控制面板中的IP地址,然后将其硬编码到应用程序中,这一切都有效.在对话框中询问用户去查看地址并手动输入它是我真正想要避免的.
我认为以编程方式获取地址并不是一项复杂的任务,但我的搜索引擎和StackOverflow技能空洞.
在这一点上,我开始考虑做一个UDP广播/监听循环来听取我自己的请求并从中提取地址,但这看起来真的像一个hackey kludge.在WinRT的新东西中是否有一个API可以让我在那里?
请注意,我说"WinRT应用程序.这意味着典型的机制喜欢Dns.GetHostEntry
或NetworkInterface.GetAllInterfaces()
不会工作.
我有一根长串.
string s1 = "'99024','99050','99070','99143','99173','99191','99201','99202','99203','99204','99211','99212','99213','99214','99215','99217','99218','99219','99221','99222','99231','99232','99238','99239','99356','99357','99371','99374','99381','99382','99383','99384','99385','99386','99391','99392'";
Run Code Online (Sandbox Code Playgroud)
我想要
string s2 =
"'99024',
'99050',
'99070',
'99143',
'99173',
'99191',
'99201',
'99202',....";
Run Code Online (Sandbox Code Playgroud)
换一种说法.也许它喜欢:
string s2 = "'99024',"+'\n'+"'99050',"+'\n'+"'99070',"+'\n'+"'99143',"+'\n'+.....;
Run Code Online (Sandbox Code Playgroud)
我需要一个简洁的代码.也许是LINQ.谢谢.
我有一个用户控件,其中包含其他几个用户控件.我正在使用MVVM.每个用户控件都有一个相应的VM.这些用户控件如何相互发送信息?我想避免在后面的xaml代码中编写任何代码.特别是我对控件(主用户控件内部)如何相互通信以及如何与容器用户控件进行通信感兴趣.
编辑:我知道使用事件代表将帮助我解决这个问题.但是,我想避免在xaml代码隐藏中编写任何代码.
我有一个DataGrid,它的数据每15秒由后台进程刷新一次.如果任何数据发生变化,我想运行一个动画,突出显示黄色更改值的单元格,然后淡出为白色.我通过以下方式让它工作:
我在Binding.TargetUpdated上创建了一个带有事件触发器的样式
<Style x:Key="ChangedCellStyle" TargetType="DataGridCell">
<Style.Triggers>
<EventTrigger RoutedEvent="Binding.TargetUpdated">
<BeginStoryboard>
<Storyboard>
<ColorAnimation Duration="00:00:15"
Storyboard.TargetProperty=
"(DataGridCell.Background).(SolidColorBrush.Color)"
From="Yellow" To="Transparent" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)
然后将其应用于我想要突出显示值的列
<DataGridTextColumn Header="Status"
Binding="{Binding Path=Status, NotifyOnTargetUpdated=True}"
CellStyle="{StaticResource ChangedCellStyle}" />
Run Code Online (Sandbox Code Playgroud)
如果数据库中状态字段的值发生更改,则单元格将以黄色突出显示,就像我想要的那样.但是,有一些问题.
首先,当最初加载数据网格时,整个列以黄色突出显示.这是有道理的,因为所有的值都是第一次加载,因此您可能希望触发TargetUpdated.我确信有一些方法可以阻止这一点,但这是一个相对较小的一点.
真正的问题是如果以任何方式对网格进行排序或过滤,整个列将以黄色突出显示.我想我不明白为什么排序会导致TargetUpdated触发,因为数据没有改变,只是它的显示方式.
所以我的问题是(1)如何在初始加载和排序/过滤时停止这种行为,以及(2)我是否在正确的轨道上,这是一个很好的方法吗?我应该提到这是MVVM.
我们有一个使用WCF服务的C#.Net应用程序.该应用程序部署在Windows服务应用程序下的生产服务器中.该模块的一部分负责创建形状文件((*.shp,*.dbf),用于工作人员今天工作的较小区域,并将其发送到PDA.
要编写形状文件,我们使用第三方DLL NetTopologySuite
GisSharpBlog.NetTopologySuite.IO.ShapefileWriter
Run Code Online (Sandbox Code Playgroud)
这也是在C#中.(我不确定它引用的任何dll是否使用非托管代码.) 系统可能会工作一段时间再说一个星期.突然间我们得到一个例外说法
Attempted to read or write protected memory.
This is often an indication that other memory is corrupt.
Run Code Online (Sandbox Code Playgroud)
从Write方法,我们将几何集合写入形状文件.
sfw.Write(FileName, new GeometryCollection(gc.ToArray()));
Run Code Online (Sandbox Code Playgroud)
(GeometryCollection也来自第三方dll,GeoAPI.dll)
此错误会导致整个服务失效并使其无法正常运行.然后我们只是重新启动服务并尝试再次运行相同的数据,它将再工作一周,直到它再次崩溃.它只发生在生产中和随机时间.我们无法找到问题的原因.
许多论坛都认为这可能是因为某些非托管代码中的内存泄漏.但我们找不到哪一个.
我们也准备重写创建新形状文件的部分.请帮我解决这个问题.如果需要更多详细信息,请与我们联系.提前致谢.
我想通过右键单击列标题来控制用户可用的DataGrid
列可见性ContextMenu
.将ContextMenu
显示所有可用的列的名称.我正在使用MVVM设计模式.
我的问题是:如何将绑定DataGridColumn
的Visibility
属性设置IsChecked
的属性MenuItem
地处ContextMenu
.
一些模型代码:
<UserControl.Resources>
<ContextMenu x:Key="ColumnHeaderContextMenu">
<MenuItem Header="Menu Item..1" IsCheckable="True" />
</ContextMenu>
<Style x:Key="ColumnHeaderStyle"
TargetType="{x:Type toolkit:DataGridColumnHeader}">
<Setter Property="ContextMenu"
Value="{StaticResource ColumnHeaderContextMenu}" />
</Style>
<BooleanToVisibilityConverter x:Key="booleanToVisibilityConverter" />
</UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)
... flaf flaf flaf
<toolkit:DataGrid x:Name="MyGrid" AutoGenerateColumns="False"
ItemsSource="{Binding MyCollection, Mode=Default}"
EnableColumnVirtualization="True" IsReadOnly="True"
ColumnHeaderStyle="{StaticResource ColumnHeaderStyle}">
<toolkit:DataGrid.Columns>
<toolkit:DataGridTextColumn Binding="{Binding Path=MyEntry}"
Header="MyEntry" Visibility="{Binding IsChecked, Converter=
{StaticResource booleanToVisibilityConverter}.... />
</toolkit:DataGrid.Columns>
</toolkit:DataGrid>
Run Code Online (Sandbox Code Playgroud)
如果我不清楚请告诉我,我会尝试详细说明.
干杯,
我在项目中实施了EF 4.在其中,有表客户和订单.其中一个(客户)与多个(订单)有关系.
我正在为(CustomerViewModel和OrderViewModel)创建一个viewmodel,从我的域层传递到接口层(在本例中为MVC).
现在的问题是"我需要在customerviewmodel同时引用视图模型?例如已经IEnumerable<OrderViewModel>
在orderviewmodel已CustomerViewModel
.如果让我怎么设计它(作为最佳实践),以便IEnumerable<OrderViewModel>
和CustomerViewModel
填充了正确的参考?
我在我的CDR表中有一个名为CallingParty的字段,它包含这样的数据
267672668788
我想选择每个数字的前3个数字
267
我有一个简单的测试控制台应用程序。它唯一的代码是
public class Class1
{
private protected int _value = 0b_1001_0110;
}
Run Code Online (Sandbox Code Playgroud)
这只是测试这些C#7.2功能是否可以构建。
在Visual Studio 2017 15.5.2中,如果我这样设置语言版本,它们可以正常构建
如果我现在将项目检入VSTS并运行构建,它将失败,并显示各种错误,例如
Test \ CSharp72Test \ CSharp72Test \ Class1.cs(7,17):错误CS0107:多个保护修饰符
Test \ CSharp72Test \ CSharp72Test \ Class1.cs(7,40):错误CS1013:无效的数字
因为它对C#7一无所知。
如果我现在添加“ Microsoft.NET.Compilers 2.6.1” NuGet软件包并对其进行重建,则该软件包在本地可以正常运行,但在VSTS中使用
Test \ CSharp72Test \ CSharp72Test \ Class1.cs(7,40):错误CS8107:功能“前导数字分隔符”在C#7.0中不可用。请使用7.2版或更高版本的语言。
现在使用的是正确版本的CSC.exe,但未传递/ langversion:latest。
在多项目解决方案中,如何在每个项目中正确传递此信息?
我想更改程序的音量(而不是主音量).我现在有以下代码:
DllImport("winmm.dll")]
public static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume);
[DllImport("winmm.dll")]
public static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);
private void volumeBar_Scroll(object sender, EventArgs e)
{
// Calculate the volume that's being set
int NewVolume = ((ushort.MaxValue / 10) * volumeBar.Value);
// Set the same volume for both the left and the right channels
uint NewVolumeAllChannels = (((uint)NewVolume & 0x0000ffff) | ((uint)NewVolume << 16));
// Set the volume
waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels);
}
Run Code Online (Sandbox Code Playgroud)
这仅适用于Win XP,而不适用于Windows 7(也可能不适用于Vista).我没有找到任何可以在Win 7上实现相同的脚本,只是为了更改主卷(我不会追求).