关于在MVVM架构下WPF中UserControl的 visibility Binding问题。 UserControl MVVM
我在ViewModel中用一个枚举来定义页面状态,根据状态控制界面中的UserControl的显隐:ViewModel:类似的还有其他三个属性ChatEnabled、Us...
我在ViewModel中用一个枚举来定义页面状态,根据状态控制界面中的UserControl的显隐:
ViewModel:
类似的还有其他三个属性ChatEnabled、UserInfoEnabled、GroupMebEnabled,我通过控制MainState来控制界面UserControl的显隐:
之前我也是这样做的,不过控制的是普通界面元素的显隐(如Button,Textbook等),但是我发现同样的方法用在UserControl上就不管用了(结果是全部显示)。我在DeBug下看过XAML中的变量:
为什么没有效果呢? 展开
ViewModel:
类似的还有其他三个属性ChatEnabled、UserInfoEnabled、GroupMebEnabled,我通过控制MainState来控制界面UserControl的显隐:
之前我也是这样做的,不过控制的是普通界面元素的显隐(如Button,Textbook等),但是我发现同样的方法用在UserControl上就不管用了(结果是全部显示)。我在DeBug下看过XAML中的变量:
为什么没有效果呢? 展开
- 你的回答被采纳后将获得:
- 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏10(财富值+成长值)
3个回答
展开全部
usercontrol如果不指定绑定,默认的是uc中的VM,需要指定要绑定的page的vm。
如:
<mycontrols:TimePicker VerticalAlignment="Center" Visibility="{Binding DataContext.IsShowTimeUI,Converter={StaticResource BoolToVisibilityCollapseConverter},RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Page}}}" Width="100" Height="30"></mycontrols:TimePicker>
这句代码表示绑定到父page的datacontext上。如果直接写,{Binding IsShowTimeUI},肯定是不起作用的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该主要是DataContext不一致吧。绑定到的属性是在主页面的vm里定义还是uc的vm里呢?
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
外面包一个层<Grid Visibility={Binding ChatEnabled}>这里放用户控件</Grid>
你可以用转换器,设置一个变量,多个状态,根据不同状态选择显示不同界面。
比如 变量1{A,B,C}
public class AccountStatusToVisibility : IValueConverter
{
#region "IValueConverter Members"
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
{
return Visibility.Collapsed;
}
if (parameter != null)
{
var p = parameter.ToString();
if (p.Contains(","))
return p.Split(',').Contains(value.ToString(), StringComparer.OrdinalIgnoreCase) ? Visibility.Visible : Visibility.Collapsed;
return string.Equals(p, value.ToString(), StringComparison.OrdinalIgnoreCase) ? Visibility.Visible : Visibility.Collapsed;
}
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
<Grid Visibility="{Binding Path=变量1,Converter={StaticResource ToVisibility},ConverterParameter='A'}"</Grid>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询