我有一个有趣的问题.假设我想播放动画或者从视图模型中改变视图的视觉状态等.我怎样才能做到这一点?它用于在Windows Phone 7上构建MVVM应用程序.
我在Windows Phone应用程序上使用MVVM Light.我想在数据绑定后在列表框中设置所选项目.
我认为最好的方法是在列表框上为Loaded事件设置eventToCommand并传递元素以设置所选索引,但我不确定如何将listbox元素传递给RelayCommand.
我注意到在向ViewModel属性添加对象时,RaisePropertyChanged会出现奇怪的行为.
private List<string> _items;
public List<string> Items
{
get
{
if(_items == null){ _items = new List<string>(); }
return _itmes;
}
set
{
_items = value;
RaisePropertyChanged("Items");
}
}
Run Code Online (Sandbox Code Playgroud)
我什么时候通过属性将对象添加到集合中
Items.Add("new string");
Run Code Online (Sandbox Code Playgroud)
RaisePropertyChanged永远不会被调用.
让RaisePropertyChanged按照我希望的方式运行的最佳方法是什么?
有没有办法将BackKeyPressed事件连接到视图中的命令(XAML)?我正在使用MVVM Light.
我有一些可能会显示的登录/注册屏幕.如果他们在登录/注册过程中,这只是显示/隐藏用户控件,我希望能够拦截后退按钮,这样我就可以显示/隐藏适当的控件.
MvvM-Light v3取消注册有问题吗?
我正在注册这样的:
Messenger.Default.Register<DialogResponse>(this,
MessageTypesUI.YesNoQueryResponse,
AnswerResponse);
Run Code Online (Sandbox Code Playgroud)
然后在"AnswerResponse"
Messenger.Default.Unregister<DialogResponse>(MessageTypesUI.YesNoQueryResponse);
Run Code Online (Sandbox Code Playgroud)
两个方法都执行,并且调用AnswerResponse,但第二次调用它两次,第三次调用三次,等等.
它就像我的"取消注册"被忽略一样.
我用Unregister()和普通的Unregister()尝试了它
V4的发行说明中有一些内容让我怀疑版本3取消注册有问题...
在我的应用程序业务中,我有3个步骤来定义一个人......在每个步骤中我都会从我的人那里获得一些信息...例如,我在步骤1中获取名字和姓氏,在步骤2中获取人物类型,并在步骤3中获取其他信息...
我使用转换UI来显示步骤到我的用户并使用Fluidkit
对于我有一个usercontrol的任何步骤...如何将我的usercontrol绑定到一个ViewModel?
我设法通过MVVM运行LongListSelector.换句话说,ItemSource是通过我的viewmodel上的属性设置的.
但是出于一些奇怪的原因,我似乎无法"绑定"LongListSelector的SelectedItem ......我没有进入ViewModel属性的Set和Get.这是怎么做到的?那么ViewModel上SelectedItem的'type'应该是什么?我认为集团内部的班级类型?
我目前的xaml:
<silverlighttoolkit:LongListSelector x:Name="AlbumsList"
Background="Transparent"
ItemTemplate="{StaticResource ItemTemplate}"
GroupHeaderTemplate="{StaticResource GroupHeaderTemplate}"
GroupItemTemplate="{StaticResource GroupItemTemplate}"
ItemsSource="{Binding GroupedAlbums}"
SelectedItem="{Binding SelectedAlbum, Mode=TwoWay}">
<silverlighttoolkit:LongListSelector.GroupItemsPanel>
<ItemsPanelTemplate>
<silverlighttoolkit:WrapPanel />
</ItemsPanelTemplate>
</silverlighttoolkit:LongListSelector.GroupItemsPanel>
</silverlighttoolkit:LongListSelector>
Run Code Online (Sandbox Code Playgroud) silverlight-toolkit windows-phone-7 mvvm-light longlistselector
我有一个带登录视图模型的登录视图,遇到了一个让我疯狂的问题.请注意,我正在使用MVVM Light.
在viewmodel中,我有三个可见性属性,应根据viewmodel的状态隐藏视图中的元素.
我的属性看起来像这样,都触发了PropertyChangedEvent:
public Visibility ErrorPanelVisibility
public Visibility LoginPanelVisibility
public Visibility LoadingPanelVisibility
Run Code Online (Sandbox Code Playgroud)
绑定看起来像这样(省略边距等):
<Border Visibility="{Binding ErrorPanelVisibility}">
<StackPanel Visibility="{Binding LoginPanelVisibility}">
<StackPanel Visibility="{Binding LoadingPanelVisibility}">
Run Code Online (Sandbox Code Playgroud)
当用户按下登录按钮时,在viewmodel中执行此方法的命令会更改可见性:
private void ExecuteLogin()
{
ErrorPanelVisibility = Visibility.Collapsed;
LoginPanelVisibility = Visibility.Collapsed;
LoadingPanelVisibility = Visibility.Visible;
// This method takes a few seconds to complete.
Login(errorMessage =>
{
if (!String.IsNullOrEmpty(errorMessage))
{
ErrorMessage = errorMessage;
ErrorPanelVisibility = Visibility.Visible;
LoginPanelVisibility = Visibility.Visible;
LoadingPanelVisibility = Visibility.Collapsed;
}
else
{
DialogResult = true;
}
});
}
Run Code Online (Sandbox Code Playgroud)
问题是面板没有折叠或在视图中更改为可见,更改不会反映在视图中.当我将可见性设置为Visible但不是Collapsed时,会触发PropertyChangedEvent并且ErrorPanel正在工作.
编辑:登录方法:
private void Login(Action<string> callback)
{ …Run Code Online (Sandbox Code Playgroud) 我现在已经做了一些WPF项目并且看到弹出相同的问题,这是聚合/组合依赖属性(dp)的"问题".
例如,我有10 dp的bool类型,我希望将其组合并作为单独的dp公开.除非一个或多个成分是假的,否则组合的dp是真的.
我目前使用addValueChanged执行此操作,它为10(!()dp中的每一个注册回调,但我想知道是否有更优雅的解决方案或可能是解决此常见情况的框架.我还没有使用reactiveUI和mvvm light但我认为它在这里很有用.
var dpd = DependencyPropertyDescriptor.FromProperty(property,
owner.GetType());
dpd.AddValueChanged(owner,
handler);
Run Code Online (Sandbox Code Playgroud) wpf dependency-properties mvvm-light caliburn.micro reactiveui
有人可以解释一下这段代码中lambda运算符的用途是什么,它有什么作用?
public string HelloWorld
{
get { return _helloWorld; }
set { Set(() => HelloWorld, ref _helloWorld, value); }
}
Run Code Online (Sandbox Code Playgroud)