Trigger Binding两种方式 实现某一pannel 或者button的 显示与隐藏
1.style trigger
#设置pannel style
<Style x:Key="PublicBuildIsShow" TargetType="FrameworkElement">
<Setter Property="RenderTransformOrigin" Value="0.5,0.5">
</Setter>
<Setter Property="Cursor" Value="Hand">
</Setter>
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1" ScaleY="1"/>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName= publicBuilding}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
<DataTrigger Binding="{Binding IsChecked, ElementName= publicBuilding}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
#设置radio button style
TargetType改成button就可以
TargetType="RadioButton"
2.binding 实现
<RadioButton Margin="2" Visibility="{Binding Path=PublicBuildingIsShow,Mode=TwoWay}">第一个大仓库</RadioButton>
viewmodel:
/// <summary>
/// 是否显示下拉列
/// </summary>
public string PublicBuildingIsShow {
get => _PublicBuildingIsShow;
set {
SetProperty(ref _PublicBuildingIsShow, value);
}
}
/// <summary>
///
/// </summary>
public string BuildingCategory {
get => _BuildingCategory;
set {
if (null != value)
{
SetProperty(ref _BuildingCategory, value);
SubItemInfos[_SelectSubIterm.Name].BuildCate = _BuildingCategory;
}
if (value == "希望的value")
{
PublicBuildingIsShow = "Visible";
}
else
{
PublicBuildingIsShow = "Collapsed";
}
}
}
private string _BuildingCategory;
3.Json序列化实现 null太多的话 会无法实例化对象 空值的话就不返回null了直接过滤掉吧
4.异步post ui界面加载等待实践
//Tip("主线程开始");
//System.Threading.Tasks.Task<string> task = Task<string>.Run(() => {
// Thread.Sleep(1000);
// Tip("第一个任务");
// return Thread.CurrentThread.ManagedThreadId.ToString();
//});
//task.GetAwaiter().OnCompleted(() =>
//{
// Console.WriteLine(task.Result);
//});
//task.ContinueWith(m => { Tip("第一个任务结束啦!我是第二个任务"); });
//Thread.Sleep(4000);
//Tip("主线程结束");
Loading = true;
//Tip("主线程开始");
System.Threading.Tasks.Task<string> task = Task<string>.Run(() => {
postFile();
return Thread.CurrentThread.ManagedThreadId.ToString();
});
task.GetAwaiter().OnCompleted(() => {
Loading = false;
//Tip(task.Result);
});