【问题标题】:How a can changes in the UI alter a ListView of Objects SelecteItem properties?UI 中的更改如何更改 Objects SelecteItem 属性的 ListView?
【发布时间】:2019-06-19 20:59:19
【问题描述】:

我有一个多维数据集对象列表,我的 ListView 显示了这些多维数据集的名称,一旦选择了多维数据集,它的属性就会显示在不同的文本框中,这些属性已经绑定到 SelectedItem。但是,我还没有想出使用 Xaml 将 SelectedItem 的属性绑定到那些 TextBox 的方法,以便立即应用更改。

我已经尝试过使用 TextChanged 事件来实现这一点,但我认为也许有一种更好的方式来实现这一点。

编辑:这是它的基本工作原理。

listOfCubes.ItemsSource = cubes; //setting the source of type Cube

绑定视图

<ListView.View>
    <GridView>
        <GridViewColumn DisplayMemberBinding="{Binding Name}" />
    </GridView>
</ListView.View>

文本框的一个示例

 <TextBox TextChanged="Cube_TextChanged"
          Text="{Binding Path=SelectedItem.RotateTransform.Rotation.Axis.X,
                         ElementName=listOfCubes}">

我要替换的东西

private void Cube_TextChanged(object sender, TextChangedEventArgs e)
{
  //apply changes in Properties to the selected cube
}

【问题讨论】:

  • 能否请您出示您的代码:)
  • 您是否已经有一个视图模型,其中包含 Cube 集合和所选 Cube 的属性?
  • 你不绑定选中项本身,你绑定选中项绑定的内容。
  • 我并不是真的要求绑定 SelectedItem,我是问如何根据选择更改多维数据集的属性。
  • 你的路径指向 selecteditem,因为你在类中没有显示其他属性,它应该指向什么?通常,在您的列表视图中,您将有 SelectedItem="{Binding MySelectedCube}" 或类似的东西,然后您的文本框将绑定到 Text="{Binding MySelectedCube.x}"。 MySelectedCube 是 Cube 的一个属性,它在你的班级某处。

标签: c# wpf xaml


【解决方案1】:

如果我理解正确:您只需要在其值更改时更新您的员工

所以基本上把它添加到你的 ViewModel

 public double X 
 {
   get => mX;
   set 
   {
       mX = value;
       OnXChanged();
       //notify
   }
 }
 private double mX;


 private void OnXChanged()
 {
    //your code
 }

然后像这样绑定它,DONT FORGET -> UpdateSourceTrigger=PropertyChanged

 <TextBox Text="{Binding SelectedItem.RotateTransform.Rotation.Axis.X,
                         ElementName=listOfCubes,
                         UpdateSourceTrigger=PropertyChanged}">

如果您需要更改文本框文本

将此添加到您的视图模型中

 public double Text 
 {
   get => mText;
   set 
   {
       mText = value;
       OnTextChanged();
       //notify
   }
 }
 private double mText;


 private void OnTextChanged()
 {
    //your code
 }

XAML

 <TextBox Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}">

如果您想将两个值(x 和文本框文本)放在一个位置

 <TextBlox>
    <TextBlox.Text>    
        <MultiBinding Converter="{StaticResource YOUR_MULTI_CONVERTER}"
                      UpdateSourceTrigger="PropertyChanged">
            <Binding Path="Text" />
            <Binding Path="SelectedItem.RotateTransform.Rotation.Axis.X"
                     ElementName="listOfCubes" />
        </MultiBinding>
    </TextBlox.Text>
</TextBlox>

【讨论】:

    【解决方案2】:

    使用TwoWay绑定模式解决了问题。

    <TextBox TextChanged="Cube_TextChanged"
          Text="{Binding Path=SelectedItem.RotateTransform.Rotation.Axis.X,
                         ElementName=listOfCubes, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-11
      • 2013-12-02
      • 2015-10-29
      • 1970-01-01
      相关资源
      最近更新 更多