C# ConvertBack 从文本框的绑定列到 JObject
C# ConvertBack from a binding column of textbox to a JObject
美好的一天!
我不擅长 wpf 和绑定,我需要你的帮助。我已经将 Json 对象 (JObject) 绑定到 TextBox 的列。
<TextBox Width="250" Text="{Binding Path=Property, Converter={StaticResource jPropertyConverter}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
当我启动我的 wpf 时,我可以正确显示 Jobject 的数据 window,现在我需要 ConvertBack 当我修改其中一个列的文本框时修改的数据,从那个 TextBox 到 JObject ,以及相关的 JValue。
public class JPropertyConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is JProperty)
{
JToken valoreProperty = (value as JProperty).Value;
if ((valoreProperty is JValue))
return (valoreProperty as JValue).Value;
}
return DependencyProperty.UnsetValue;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
??
}
}
我可以像这样更改此 JObject 树的 "leaves" 的值:
(valoreProperty as JValue).Value = "Hello!";
如何在转换回来的过程中更改此 JObject 树的 "leaves"?
对不起我的英语不好。
谢谢再见
编辑:
谢谢数据库!成功了,非常感谢!
现在我需要在另一列中显示文本框中值的每个长度,显然如果我更改文本框中的值,相对长度值也会改变。
我试过:
<DataGridTextColumn Header="Lunghezza2" IsReadOnly="True" Width="50" Binding="{Binding Path=Property.Value.Value.toString().Length, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" />
或者以另一种方式使用转换器,传递 JProperty
public class LengthConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is JProperty)
{
JToken jValue = (value as JProperty).Value;
if ((jValue is JValue) && (jValue as JValue).Value != null)
return (jValue as JValue).Value.ToString().Length.ToString();
else
return "0";
}
else
return "";
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
但是当我更改文本框值时,每次尝试都不起作用,有什么提示吗?
再次感谢!
为此您不需要转换器。假设你的Property
属性returns一个JProperty
,你可以直接绑定到JProperty.Value.Value
<TextBox Name="PropertyTextBox"
Text="{Binding Path=Property.Value.Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
/>
如果你想禁用 TextBox
如果绑定 Property
不是 "simple" JProperty
(一个只有 JValue
作为它的值), 你可以这样做:
<TextBox Name="PropertyTextBox"
Text="{Binding Path=Property.Value.Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
IsEnabled="{Binding Path=Property, Converter={StaticResource IsSimpleJPropertyConverter}, Mode=OneWay}"
/>
使用转换器
public class IsSimpleJPropertyConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is JProperty)
{
JToken jValue = (value as JProperty).Value;
if (jValue is JValue)
return true;
}
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
美好的一天! 我不擅长 wpf 和绑定,我需要你的帮助。我已经将 Json 对象 (JObject) 绑定到 TextBox 的列。
<TextBox Width="250" Text="{Binding Path=Property, Converter={StaticResource jPropertyConverter}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
当我启动我的 wpf 时,我可以正确显示 Jobject 的数据 window,现在我需要 ConvertBack 当我修改其中一个列的文本框时修改的数据,从那个 TextBox 到 JObject ,以及相关的 JValue。
public class JPropertyConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is JProperty)
{
JToken valoreProperty = (value as JProperty).Value;
if ((valoreProperty is JValue))
return (valoreProperty as JValue).Value;
}
return DependencyProperty.UnsetValue;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
??
}
}
我可以像这样更改此 JObject 树的 "leaves" 的值:
(valoreProperty as JValue).Value = "Hello!";
如何在转换回来的过程中更改此 JObject 树的 "leaves"? 对不起我的英语不好。 谢谢再见
编辑: 谢谢数据库!成功了,非常感谢!
现在我需要在另一列中显示文本框中值的每个长度,显然如果我更改文本框中的值,相对长度值也会改变。
我试过:
<DataGridTextColumn Header="Lunghezza2" IsReadOnly="True" Width="50" Binding="{Binding Path=Property.Value.Value.toString().Length, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" />
或者以另一种方式使用转换器,传递 JProperty
public class LengthConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is JProperty)
{
JToken jValue = (value as JProperty).Value;
if ((jValue is JValue) && (jValue as JValue).Value != null)
return (jValue as JValue).Value.ToString().Length.ToString();
else
return "0";
}
else
return "";
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
但是当我更改文本框值时,每次尝试都不起作用,有什么提示吗? 再次感谢!
为此您不需要转换器。假设你的Property
属性returns一个JProperty
,你可以直接绑定到JProperty.Value.Value
<TextBox Name="PropertyTextBox"
Text="{Binding Path=Property.Value.Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
/>
如果你想禁用 TextBox
如果绑定 Property
不是 "simple" JProperty
(一个只有 JValue
作为它的值), 你可以这样做:
<TextBox Name="PropertyTextBox"
Text="{Binding Path=Property.Value.Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
IsEnabled="{Binding Path=Property, Converter={StaticResource IsSimpleJPropertyConverter}, Mode=OneWay}"
/>
使用转换器
public class IsSimpleJPropertyConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is JProperty)
{
JToken jValue = (value as JProperty).Value;
if (jValue is JValue)
return true;
}
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}