假设代码如下,
public class SomeViewModel{
ICommand ReloadCommand{get...}
ICommand SaveCommand{get..}
}
//SomeView.xaml
<SomeCustomControl Reload="ReloadCommand" Save="SaveCommand" /> //NOT SURE HOW??
//SomeCustomContro.xaml
<SomeCustomControl x:Name="someCustomControl">
<Button Command={Binding ElementName=someCustomControl, Path=Reload />
<Button Command={Binding ElementName=someCustomControl, Path=Save />
</SomeCustomControl>
//SomeCustomControl.xaml.cs
..... //NOT SURE HOW TO ALLOW BINDING TO A ICOMMAND ??
Run Code Online (Sandbox Code Playgroud)
在我的SomeCustomControl中,我需要支持"在xaml中绑定ICommand".我理解DependencyProperties可以像这样绑定,但在这种情况下我需要绑定ICommand.
有人可以建议最好的方法是什么?任何建议的材料或链接都是有用的,因为我错过了方向.
编辑1)我可以在SomeCustomControl中使用DataContext SomeView.两者之间有更多的逻辑和分离,我无法解散.我必须在SomeCustomControl的某个地方维护一个Reload/Save ICommands的引用.
非常感谢.
在加载插件并尝试创建"XYZ"控件时,应用程序将引发以下异常:
"组件'XYZ'没有在UserControls构造函数的InitializeComponent()方法上由URI'/ThePluginAssembly ;component/XYZ.xaml'"标识的资源.
关键点是:
用户控件位于插件程序集中
我试图从插件程序集内部创建usercontrol
插件与主应用程序位于同一目录中
用户控件仅在通过XAML创建时才会出现问题.我在同一个程序集中有几个其他用户控件,但我使用代码实例化这些用户控件.当我尝试在XAML中创建UserControl时,我只收到错误消息.
在做一些谷歌时,我意识到当我的插件的两个实例加载到应用程序中时会发生这种情况.当我从其中一个文件夹中删除我的插件时(我允许从两个位置加载此插件),此异常停止重复发生.
我的问题:
1)WPF尝试解析URI加载我的控件背后的原因是什么?
2)我是否有办法在应用程序中加载我的插件的两个实例,并以某种方式摆脱这个异常?或者某种方式为每个实例创建一个唯一的URI(如果此异常是由冲突的URI引起的).
任何评论或参考都会有所帮助.
谢谢你的关注.
编辑:与Phil发布的问题相同:如何强制WPF使用使用程序集强名称的资源URI?哎呀!
在抽象类中是否存在"公共"构造函数的相关性?我想不出任何可能的方法来使用它,在这种情况下不应该被编译器视为错误(C#,不确定其他语言是否允许).
示例代码:
internal abstract class Vehicle
{
public Vehicle()
{
}
}
Run Code Online (Sandbox Code Playgroud)
C#编译器允许这个代码编译,而我无法从外部世界调用这个构造函数.它只能从派生类中调用.所以不应该只允许'protected'和'private'修饰符.请评论.
我使用CollectionViewSource来过滤ListBox中显示的记录.xaml如下.
<Window x:Class="WPFStarter.ListBoxItemsFilter.ListBoxFilterUsingCollectionViewSource"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="userControl"
Title="ListBoxFilterUsingCollectionViewSource" Height="300" Width="300">
<Window.Resources>
<CollectionViewSource Source="{Binding ElementName=userControl, Path=DataContext.Items}"
x:Key="cvs" Filter="CollectionViewSource_Filter"/>
</Window.Resources>
<StackPanel Orientation="Vertical">
<TextBox x:Name="txtSearch" TextChanged="txtSearch_TextChanged"/>
<TextBlock x:Name="txtSummary" Grid.Column="0" HorizontalAlignment="Right" VerticalAlignment="Bottom" FontSize="8"></TextBlock>
<ListBox ItemsSource="{Binding Source={StaticResource cvs}}" DisplayMemberPath="First"/>
</StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
这是我的代码behing(请不要介意这个代码隐藏,在真实的应用程序中我使用最好的MVVM来实现这个场景).
public partial class ListBoxFilterUsingCollectionViewSource : Window
{
private string _text="";
private readonly CollectionViewSource _viewSource;
public ListBoxFilterUsingCollectionViewSource()
{
InitializeComponent();
_viewSource = this.FindResource("cvs") as CollectionViewSource;
}
private void CollectionViewSource_Filter(object sender, FilterEventArgs e)
{
var character = e.Item as Character;
e.Accepted = character != null && character.First.ToLower().Contains(_text.ToLower()); …Run Code Online (Sandbox Code Playgroud) 我在页面中有一个图像按钮,可以在鼠标点击时触发,默认情况下它会在按下时触发我也要禁用.
我知道asp:Button中的"UseSubmitBehaviour"属性,有没有办法在asp:ImageButton中做同样的事情?
在进行升级时,碰巧碰到了这样的代码.
interface ICustomization
{
IMMColumnsDefinition GetColumnsDefinition();
}
class Customization : ICustomization
{
private readonly ColumnDefinition _columnDefinition;
//More code here.
public ColumnsDefinition GetColumnsDefinition()
{
return _columnDefinition;
}
ColumnsDefinition ICustomization.GetColumnsDefinition() //redundant
{
return GetColumnsDefinition();
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:在这段代码中是否需要/使用"显式"接口实现?如果我删除上面标记为"冗余"的方法(显式实现接口)会不会产生任何问题?
PS:我理解接口的显式实现非常重要,它可以在我们需要仅在接口级别访问方法时使用,并且使用具有相同签名方法的两个接口.
如果我只将"受保护","内部"和"私人"成员(字段,方法,财产,事件)保留在一个被声明为"内部"的类中,那么这不是更具体和恰当吗?
我已经在各种代码中看到了这种做法(在"内部"类中有"公共"成员),所以只是想知道这是一种不好的做法,还是有一些好处或优势.
[只关心C#]感谢您的关注.
使用字典时,我总是覆盖GetHashCode和Equals(或者为字典提供自定义比较器).
当我创建一个匿名类作为键时,封面后面会发生什么?
示例代码....
var groups=(from item in items
group item by new { item.ClientId, item.CustodianId, item.CurrencyId }
into g
select new {
Key=g.Key,
Sum=g.Sum(x => x.Cash)
}).ToDictionary(item=>item.Key,item=>item.Sum);
Run Code Online (Sandbox Code Playgroud)
这段代码给了我预期的结果,但我没有为匿名类提供GetHashCode和Equals方法.这段代码不应该根据匿名类中的项目对我的项目进行分组吗?
在我的Dispose方法(如下所示)中,每次我想调用someObj.Dispose()时我都会检查someObj!= null.
这是因为我的设计不好吗?他们是否更清楚地确定在没有NullReference异常风险的情况下调用在对象中使用的所有成员(实现IDisposable)的Dispose?
protected void Dispose(bool disposing)
{
if (disposing)
{
if (_splitTradePopupManager != null)
{
_splitTradePopupManager.Dispose();
}
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的关注.
我需要删除Grid.Row占用的空间.我能够折叠(删除)我放在Grid.Row中的控件,但由于RowDefinition具有固定的大小(高度),即使在删除子控件后我仍然会看到一个空行.
有没有办法折叠RowDefinition/Grid.Row?
谢谢你的关注.
c# ×7
wpf ×4
.net ×3
asp.net ×1
binding ×1
constructor ×1
dictionary ×1
idisposable ×1
imagebutton ×1
interface ×1
visibility ×1
xaml ×1