wpf属性更新后通知的问题

swtee 2019-01-11 05:29:50
问题:两个checkbox更新后,绑定的属性并没有更新,请教各位大神带这么解决?只有200分,如果哪位能解决,全部奉上
代码如下:
view(XAML文件):
<UserControl.Resources>
<ResourceDictionary>
<local:ShowConverter x:Key="sc"/>
</ResourceDictionary>
</UserControl.Resources>
<CheckBox Content="{Binding BSM.Commander_BTNMain.Name}" IsChecked="{Binding BSM.Commander_BTNMain.IsSelected}" >
<CheckBox Content="{Binding BSM.Commander_BTNSub.Name}" Grid.Column="1" IsChecked="{Binding BSM.Commander_BTNSub.IsSelected}" />
<Label>
<Label.Content>
<Label Grid.Column="1">
<Label.Content>
<MultiBinding Converter="{StaticResource sc}">
<Binding Path="BSM.Commander_BTNMain" Mode="OneWay"/>
<Binding Path="BSM.Commander_BTNSub"/>
</MultiBinding>
</Label.Content>
</Label>
Model:
public class ICheckItem : BindableBase
{
/// <summary>
///当前项是否选中
///</summary>
private bool isSelected;
public bool IsSelected
{
get { return isSelected; }
set
{
SetProperty(ref isSelected, value);
}
} /// <summary>
///名称
///</summary>
public string Name { get; set; }
}

public class BTNSysDeployModel : BindableBase
{ //主车
private ICheckItem commander_BTNMain = new ICheckItem();

public ICheckItem Commander_BTNMain
{
get { return commander_BTNMain; }
set
{
SetProperty(ref commander_BTNMain, value);
}
}
//副车
private ICheckItem commander_BTNSub = new ICheckItem();

public ICheckItem Commander_BTNSub
{
get { return commander_BTNSub; }
set
{
SetProperty(ref commander_BTNSub, value);
}
}
}
转换器:
public class ShowConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
string show = "";
foreach (var item in values)
{
if (item is ICheckItem)
{
ICheckItem ic = (ICheckItem)item;
if (ic.IsSelected)
{
show += ic.Name + " ";
}
}
}

return show;
}

public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
...全文
837 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
星辰落 2019-01-28
  • 打赏
  • 举报
回复
INotifyPropertyChanged,还有前端绑定里设置一下mode=twoway
qq14923349 2019-01-23
  • 打赏
  • 举报
回复
BindableBase 这玩意我用过 你要确定 是否特定场景才没收到通知?这是个坑
改用INotify就ok了
swtee 2019-01-20
  • 打赏
  • 举报
回复
自顶,求大神
swtee 2019-01-20
  • 打赏
  • 举报
回复
引用 1 楼 ilikeff8 的回复:
用INotifyPropertyChanged接口更方便简单


<CheckBox Content="上传失败" IsChecked="{Binding SearchInterfaceLogIsNotSuccess, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource AlignmentCheckBoxStyle}" Canvas.Left="664" Canvas.Top="25" Width="92" Height="18"/>



int searchInterfaceLogIsNotSuccess = 0;
public int SearchInterfaceLogIsNotSuccess
{
get
{ return searchInterfaceLogIsNotSuccess; }
set
{
if (searchInterfaceLogIsNotSuccess != value)
{
searchInterfaceLogIsNotSuccess = value;
OnPropertyChanged(nameof(SearchInterfaceLogIsNotSuccess));
}
}
}

public class MainViewModel : INotifyPropertyChanged

public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

1.BindableBase和INotifyPropertyChanged是用是一样的,项目组要求使用前者;
2.情况不一样,您绑定的是一个int类型的属性,我的控件绑定的是一个引用类型的属性
我的问题简单的可以表达为如:
<Label Grid.Row="1" Name="linkLable" Content="{Binding Stu,Converter={StaticResource sc}}" HorizontalAlignment="Center" VerticalAlignment="Center"/ >
private Student _stu = new Student();

public Student Stu
{
get { return _stu; }
set { SetProperty(ref _stu, value); }
}

public class Student : BindableBase
{
private string _name;
public string Name
{
get
{
return _name;
}
set
{
SetProperty(ref _name, value);
}
}
int _age;
public int Age
{
get
{
return _age;
}
set
{
SetProperty(ref _age, value);
}
}
}
ilikeff8 2019-01-11
  • 打赏
  • 举报
回复
我程序里返回要用整形,所以定义为int,会自动转换,searchInterfaceLogIsNotSuccess定义成bool也可以
ilikeff8 2019-01-11
  • 打赏
  • 举报
回复
IsChecked返回是整型
ilikeff8 2019-01-11
  • 打赏
  • 举报
回复
用INotifyPropertyChanged接口更方便简单


<CheckBox Content="上传失败" IsChecked="{Binding SearchInterfaceLogIsNotSuccess, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource AlignmentCheckBoxStyle}" Canvas.Left="664" Canvas.Top="25" Width="92" Height="18"/>



int searchInterfaceLogIsNotSuccess = 0;
public int SearchInterfaceLogIsNotSuccess
{
get
{ return searchInterfaceLogIsNotSuccess; }
set
{
if (searchInterfaceLogIsNotSuccess != value)
{
searchInterfaceLogIsNotSuccess = value;
OnPropertyChanged(nameof(SearchInterfaceLogIsNotSuccess));
}
}
}

public class MainViewModel : INotifyPropertyChanged

public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}



Windows Presentation Foundation (WPF) 是.NET Framework 3.0 的关键组件,是支持下一代视窗应用程序表现层编程的平台,也是微软新发布的Vista操作系统的三大核心开发库之一,主要负责图形显示。本书是针对那些对用户界面开发感兴趣的软件开发人员编写的,易于理解,适合那些.NET的新手,并有助于理解像Microsoft Expression Blend这样产品的精髓。   本书适合各层次Web开发人员阅读。 第一部分 背景 第1章 为什么创造WPF    1.1 回顾过去    1.2 步入WPF    1.3 作为.NET Framework的组成部分     1.3.1 为托管代码而设计     1.3.2 强调声明式描述    1.4 小结   第2章 XAML揭秘    2.1 XAML定义    2.2 元素和特性    2.3 命名空间    2.4 属性元素    2.5 类型转换器    2.6 标记扩展    2.7 对象元素的子元素     2.7.1 内容属性     2.7.2 集合项     2.7.3 更多类型转换    2.8 编译:将XAML与过程式代码混合使用     2.8.1 在运行时加载和解析XAML     2.8.2 编译XAML     2.8.3 XAML关键字    2.9 小结     2.9.1 抱怨1:XML太过冗长不便于输入     2.9.2 抱怨2:基于XML的系统性能差   第3章 WPF的重要新概念    3.1 逻辑树与可视树    3.2 依赖属性     3.2.1 依赖属性的实现     3.2.2 变更通知     3.2.3 属性值继承     3.2.4 对多个提供程序的支持     3.2.5 附加属性    3.3 路由事件     3.3.1 路由事件的实现     3.3.2 路由策略和事件处理程序     3.3.3 路由事件实践     3.3.4 附加事件    3.4 命令     3.4.1 内建命令     3.4.2 使用输入手势执行命令     3.4.3 带有内建命令绑定的控件    3.5 漫游类层次    3.6 小结  第二部分 构建WPF应用程序  第4章 WPF控件   第5章 尺寸缩放、定位与变换元素   第6章 使用面板做布局   第7章 构建并部署应用程序  第三部分 为专业开发人员设计的功能  第8章 资源   第9章 数据绑定   第10章 样式、模板、皮肤和主题 233 第四部分 通过富媒体使程序领先于时代  第11章 2D图形   第12章 3D图形   第13章 动画   第14章 音频、视频、语音和文档  第五部分 高级主题  第15章 与Win32、Windows Form以及ActiveX之间的互用性   第16章 用户控件和自定义控件   第17章 使用自定义面板做布局  第六部分 附录 附录 有用的工具 

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧