如何取消数据绑定WPF ListBox中的用户选择?source属性设置正确,但ListBox选择不同步.
我有一个MVVM应用程序,如果某些验证条件失败,需要取消WPF ListBox中的用户选择.验证由ListBox中的选择触发,而不是通过"提交"按钮触发.
该ListBox.SelectedItem属性绑定到一个ViewModel.CurrentDocument属性.如果验证失败,则视图模型属性的setter退出而不更改属性.因此,ListBox.SelectedItem绑定的属性不会更改.
如果发生这种情况,视图模型属性setter会在它退出之前引发PropertyChanged事件,我认为这足以将ListBox重置回旧选择.但这不起作用 - ListBox仍然显示新的用户选择.我需要覆盖该选择并将其与source属性同步.
如果不清楚,这里有一个例子:ListBox有两个项目,Document1和Document2; 选择了Document1.用户选择Document2,但Document1无法验证.该ViewModel.CurrentDocument属性仍设置为Document1,但ListBox显示已选择Document2.我需要将ListBox选择返回到Document1.
这是我的ListBox绑定:
<ListBox
ItemsSource="{Binding Path=SearchResults, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding Path=CurrentDocument, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
Run Code Online (Sandbox Code Playgroud)
我尝试使用从ViewModel(作为事件)到View(订阅事件)的回调,强制将SelectedItem属性返回到旧选择.我使用事件传递旧文档,它是正确的(旧选择),但ListBox选择不会更改回来.
那么,如何将ListBox选项与其SelectedItem属性绑定的视图模型属性同步返回?谢谢你的帮助.
我需要使用反射动态地实例化一个C#类型.这是我的场景:我正在编写一个基类,它需要将某个对象实例化为其初始化的一部分.基类不知道它应该实例化的对象类型,但派生类将会.所以,我希望派生类在base()调用中将类型传递给基类.代码看起来像这样:
public abstract class MyBaseClass
{
protected MyBaseClass(Type myType)
{
// Instantiate object of type passed in
/* This is the part I'm trying to figure out */
}
}
public class MyDerivedClass : MyBaseClass
{
public MyDerivedClass() : base(typeof(Whatever))
{
}
}
Run Code Online (Sandbox Code Playgroud)
换句话说,基类委托其派生类型选择要实例化的对象类型.
有人可以帮忙吗?
我在VS 2010中使用Windows Installer部署项目来为小型演示项目创建安装程序.该演示需要安装SQL Compact数据库文件(MyData.sdf).该演示无法将数据库安装到用户计算机上的应用程序文件夹中 - 如果我这样做,我会收到"拒绝访问"错误.因此,安装数据库的逻辑位置似乎是用户的c:\ ProgramData文件夹下的子文件夹.
如何在部署项目的文件系统编辑器中指定c:\ ProgramData文件夹?我右键单击目标计算机节点上的文件系统,将鼠标悬停在添加特殊文件夹上以查看特殊文件夹的弹出列表,但我没有看到与c:\ ProgramData文件夹对应的特殊文件夹.
列表中的一个条目是否与文件夹对应?我是否必须将其设置为自定义文件夹?如果我这样做,我将如何设置自定义文件夹?谢谢你的帮助.
我花了一个非常令人沮丧的下午搜索谷歌寻找一个商业级WPF SplitButton控制,将在一个ToolBar.A SplitButton是您可以单击主要部分Button以执行默认操作的方法,或者单击右侧的小三角形以获取备用操作的下拉菜单.
我在网上找到了几个(包括CodeProject上的一个,包括CodePlex上的两个).它们ToolBar都没有正常工作 - 它们或者根本没有出现,或者它们没有工具栏按钮样式.我甚至看过一些商业产品,比如ActiPro的弹出按钮(在他们的SharedLibrary DLL中).同样的问题.
是的,我已经看到所有关于创建一个是多么容易的帖子.这很容易地创建一个坏的,但不是那么容易创建一个看起来和作品,如SplitButton在Outlook或Visual Studio,这里,如果你松开鼠标按钮的下拉菜单不消失.
所以,这是我的问题:SplitButton在工具栏中是否存在开源或商用的商业级产品?我不是在寻找一个控件,它是每年1500美元订阅某人控件库的一部分,但是如果价格合理SplitButton,我肯定想找到它.
我在使用SQL Compact的桌面应用程序中使用Entity Framework 4.我想在我的应用程序中使用SQL Compact 的私有安装,这样我的安装程序就可以安装SQL Compact而无需为用户提供第二次安装.它还避免了版本化的麻烦.
我的开发机器安装了SQL Compact 3.5 SP1作为公共安装,所以我的应用程序在那里运行良好,正如人们所期望的那样.但它没有在我的测试机上运行,它没有安装SQL Compact.我收到此错误:
The specified store provider cannot be found in the configuration, or is not valid.
Run Code Online (Sandbox Code Playgroud)
我知道有些人在SQL Compact私有安装方面遇到了困难,但我已经使用了一段时间了,我真的很喜欢它们.不幸的是,我的常规私人安装方法不起作用.我已经检查了我的SQL CE文件上的版本号,它们都是3.8.8078.0,这是SP2 RC版本.
以下是我在私人安装中包含的文件:
我已经将System.Data.SqlServerCe的引用添加到我的项目中,并且我已经验证上面列出的所有文件都被复制到安装机器上的应用程序文件夹中.
以下是我打开SQL Compact文件时用于配置EntityConnectionStringBuilder的代码:
var sqlCompactConnectionString = string.Format("Data Source={0}", filePath);
// Set Builder properties
builder.Metadata = string.Format("res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl", edmName);
builder.Provider = "System.Data.SqlServerCe.3.5";
builder.ProviderConnectionString = sqlCompactConnectionString;
var edmConnectionString = builder.ToString();
Run Code Online (Sandbox Code Playgroud)
我错过了一个文件吗?我是否错过了告诉Entity Framework在哪里找到我的SQL Compact DLL所需的配置步骤?任何其他建议为什么EF没有在安装机器上找到我的SQL Compact DLL?谢谢你的帮助.
我正在使用VS 2010在C#中创建DLL,并且我已经为其所有成员创建了XML注释.当我构建DLL时,如何生成将为DLL提供Intellisense的XML文件?谢谢你的帮助.
我正在构建一个演示应用程序来学习Prism 4的导航功能.该应用程序有两个模块 - 每个模块有三个视图:
Shell有三个命名区域:"RibbonRegion","TaskButtonRegion"和"WorkspaceRegion".视图加载到这些区域.为了测试基本设置,我使用Prism Region Manager注册了所有三个视图,以便它们在启动时加载,并且所有操作都按预期工作.
接下来,我修改了设置,以便在启动时只加载任务按钮.其他视图将仅在请求时加载,方法是单击任务按钮.我的模块初始化器看起来像这样:
public void Initialize()
{
/* We register the Task Button with the Prism Task Button Region because we want it
* to be displayed immediately when the module is loaded, and for the lifetime of
* the application. */
// Register Task Button with Prism Region
m_RegionManager.RegisterViewWithRegion("TaskButtonRegion", typeof(ModuleATaskButton));
/* We register these objects with the Unity container because we don't want them
* instantiated until we navigate to …Run Code Online (Sandbox Code Playgroud) 在VS 2010中的MS Test下运行测试时,如何找到执行程序集的路径的等价物?我需要知道测试的运行位置,以便我可以设置它所需的数据文件的相对路径.
我试图找到一个执行测试的相同路径,如果我System.Reflection.Assembly.GetEntryAssembly().Location在执行程序集上使用,我会得到它.谢谢你的帮助.
我正在创建一个复合WPF(Prism)应用程序,它有几个不同的项目(Shell,模块等).我正准备使用Log4Net实现日志记录.似乎有两种方法来设置日志记录:
让Shell项目完成所有实际的日志记录.它获取对Log4Net的引用,其他项目触发复合事件,让Shell知道它需要记录一些东西.这些项目仅针对在Shell的app.config文件(DEBUG,ERROR等)中打开日志记录的级别触发事件,以免降低性能.
为每个项目(包括模块)提供Log4Net引用,让项目自己记录到公共日志文件,而不是向Shell发送消息以进行日志记录.
哪种方法更好?或者,我应该考虑另一种方法吗?谢谢你的帮助.
我厌倦了一遍又一遍地创建相同的图像+文本按钮,我想将标记移动到控件模板.这是我的问题:我需要提供模板绑定来将图像和文本添加到模板化按钮,而Button控件似乎没有我可以绑定的属性.
到目前为止,我的模板看起来像这样(对于未知的模板绑定,使用'???'):
<ControlTemplate x:Key="ImageButtonTemplate" TargetType="{x:Type Button}">
<StackPanel Height="Auto" Orientation="Horizontal">
<Image Source="{TemplateBinding ???}" Width="24" Height="24" Stretch="Fill"/>
<TextBlock Text="{TemplateBinding ???}" HorizontalAlignment="Left" Foreground="{DynamicResource TaskButtonTextBrush}" FontWeight="Bold" Margin="5,0,0,0" VerticalAlignment="Center" FontSize="12" />
</StackPanel>
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)
是否可以使用控件模板创建此图像+文本按钮,或者我是否必须转到用户控件才能执行此操作?如果可以使用控件模板完成,我该如何设置模板绑定?
c# ×5
wpf ×3
prism ×2
button ×1
intellisense ×1
log4net ×1
logging ×1
mstest ×1
mvvm ×1
prism-4 ×1
reflection ×1
split-button ×1
wpf-controls ×1
xml ×1