仅从 UI 的项目源中删除项目
Removing an item from itemsource for UI only
我有一个与枚举绑定的组合框,我的枚举有 None 或模型级别所需的 NA 值,但这些值与 UI level.I 的用户无关想将它们展示给 user.I 也不想为视图模型使用单独的枚举 view.So 我做了一个标记扩展,它将删除 None 或项目 source.Here 中的 NA 是我的代码`
public sealed class EnumBindingHelper : MarkupExtension
{
private readonly Type _enumType;
public EnumBindingHelper(Type enumType)
{
_enumType = enumType;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
var arr= Enum.GetValues(_enumType);
var list = (from object item in arr select item.ToString()).ToList();
list.RemoveAll(x => x.Equals("None") || x.Equals("NA") || x.Equals("NONE") || x.Equals("Na"));
return list;
}
}
我的视图绑定是
<ComboBox ItemsSource="{helpers:EnumBindingHelper {x:Type MyEnum}}" SelectedItem="{Binding SelectedValue,Mode=TwoWay}"/>
它在 UI 中工作正常,我在组合框中看不到 NA 和 none 值,但是当我启动应用程序时 UI 中的选定项目总是空的。
我的枚举是
MyEnum
{
value1=0,
value2=1,
value3=2,
None=4
}
我还在我的视图模型代码中设置 SelectedValue=value1。
任何人都可以解释为什么会发生这种情况以及我如何解决 this.I 希望正常行为,例如所选项目应该按照绑定或第一个项目,如果所选项目为空。
MarkupExtension 应该return过滤后的枚举值而不是字符串:
private static readonly string[] exclude =
new string[] { "None", "NONE", "Na", "NA" };
public override object ProvideValue(IServiceProvider serviceProvider)
{
return Enum.GetValues(_enumType).Cast<object>()
.Where(e => !exclude.Contains(e.ToString())).ToList();
}
我有一个与枚举绑定的组合框,我的枚举有 None 或模型级别所需的 NA 值,但这些值与 UI level.I 的用户无关想将它们展示给 user.I 也不想为视图模型使用单独的枚举 view.So 我做了一个标记扩展,它将删除 None 或项目 source.Here 中的 NA 是我的代码`
public sealed class EnumBindingHelper : MarkupExtension
{
private readonly Type _enumType;
public EnumBindingHelper(Type enumType)
{
_enumType = enumType;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
var arr= Enum.GetValues(_enumType);
var list = (from object item in arr select item.ToString()).ToList();
list.RemoveAll(x => x.Equals("None") || x.Equals("NA") || x.Equals("NONE") || x.Equals("Na"));
return list;
}
}
我的视图绑定是
<ComboBox ItemsSource="{helpers:EnumBindingHelper {x:Type MyEnum}}" SelectedItem="{Binding SelectedValue,Mode=TwoWay}"/>
它在 UI 中工作正常,我在组合框中看不到 NA 和 none 值,但是当我启动应用程序时 UI 中的选定项目总是空的。
我的枚举是
MyEnum
{
value1=0,
value2=1,
value3=2,
None=4
}
我还在我的视图模型代码中设置 SelectedValue=value1。 任何人都可以解释为什么会发生这种情况以及我如何解决 this.I 希望正常行为,例如所选项目应该按照绑定或第一个项目,如果所选项目为空。
MarkupExtension 应该return过滤后的枚举值而不是字符串:
private static readonly string[] exclude =
new string[] { "None", "NONE", "Na", "NA" };
public override object ProvideValue(IServiceProvider serviceProvider)
{
return Enum.GetValues(_enumType).Cast<object>()
.Where(e => !exclude.Contains(e.ToString())).ToList();
}